RealView Compilation Tools ã¢ã»ã³ãã©ã¬ã¤ã - ARM Information Center
RealView Compilation Tools ã¢ã»ã³ãã©ã¬ã¤ã - ARM Information Center
RealView Compilation Tools ã¢ã»ã³ãã©ã¬ã¤ã - ARM Information Center
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
®<br />
<strong>RealView</strong><br />
<strong>Compilation</strong> <strong>Tools</strong><br />
バージ ョ ン 4.0<br />
アセンブラガイ ド<br />
Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved.<br />
<strong>ARM</strong> DUI 0204IJ
<strong>RealView</strong> <strong>Compilation</strong> <strong>Tools</strong><br />
アセンブラガイ ド<br />
Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved.<br />
リリース 情 報<br />
本 書 には 以 下 の 変 更 が 加 え ら れています。<br />
変 更 履 歴<br />
日 付 発 行 機 密 保 持 ステー タ ス 変 更<br />
2002 年 8 月 A 非 機 密 扱 い 第 1.2 版<br />
2003 年 1 月 B 非 機 密 扱 い 第 2.0 版<br />
2003 年 9 月 C 非 機 密 扱 い <strong>RealView</strong> Development Suite v2.0 向 け リ リ ース 2.0.1<br />
2004 年 1 月 D 非 機 密 扱 い <strong>RealView</strong> Development Suite v2.1 向 け リ リ ース 2.1<br />
2004 年 12 月 E 非 機 密 扱 い <strong>RealView</strong> Development Suite v2.2 向 け リ リ ース 2.2<br />
2005 年 5 月 F 非 機 密 扱 い <strong>RealView</strong> Development Suite v2.2 SP1 向 け リ リ ース<br />
2.2<br />
2006 年 3 月 G 非 機 密 扱 い <strong>RealView</strong> Development Suite v3.0 向 け リ リ ース 3.0<br />
2007 年 3 月 H 非 機 密 扱 い <strong>RealView</strong> Development Suite v3.1 向 け リ リ ース 3.1<br />
2008 年 9 月 I 非 機 密 扱 い <strong>RealView</strong> Development Suite v4.0 向 け リ リ ース 4.0<br />
著 作 権<br />
®<br />
または のマー ク が 付 いた 言 葉 およびロ ゴは、 こ の 著 作 権 情 報 で 別 段 に 規 定 さ れてい る 場 合 を<br />
除 き、<strong>ARM</strong> Limited の EU またはその 他 の 国 における 登 録 商 標 および 商 標 です。 本 書 に 記 載 さ れて<br />
い る 他 の 製 品 名 は、 各 社 の 所 有 する 商 標 です。<br />
本 書 に 記 載 さ れてい る 情 報 の 全 部 ま たは 一 部 、 な らびに 本 書 で 紹 介 する 製 品 は、 著 作 権 所 有 者 の<br />
文 書 に よ る 事 前 の 許 可 を 得 ない 限 り 、 転 用 ・ 複 製 する こ と を 禁 じ ます。<br />
本 書 に 記 載 さ れてい る 製 品 は、 今 後 も 継 続 的 に 開 発 ・ 改 良 の 対 象 と な り ます。 本 書 に 含 まれる 製<br />
品 およびその 利 用 方 法 についての 情 報 は、 <strong>ARM</strong> が 利 用 者 の 利 益 のために 提 供 する ものです。 した<br />
がって 当 社 では、 製 品 の 市 販 性 ま たは 利 用 の 適 切 性 を 含 め、 暗 示 的 ・ 明 示 的 に 関 係 な く 一 切 の 責<br />
任 を 負 いません。<br />
本 書 は、 本 製 品 の 利 用 者 をサポー ト する こ と だけを 目 的 と し ています。 本 書 に 記 載 さ れている 情<br />
報 の 使 用 、 情 報 の 誤 り ま たは 省 略 、 あ るいは 本 製 品 の 誤 使 用 に よ って 発 生 し たいかな る 損 失 ・ 損<br />
傷 について も、 <strong>ARM</strong> Limited は 一 切 責 任 を 負 いません。<br />
<strong>ARM</strong> という 用 語 が 使 用 されている 場 合 は、 “<strong>ARM</strong> ま たは 必 要 に 応 じ てその 子 会 社 ” を 指 します。<br />
ii Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
機 密 保 持 ステー タ ス<br />
本 書 は 非 機 密 扱 いであ り 、 本 書 を 使 用 、 複 製 、 および 開 示 する 権 利 は、 <strong>ARM</strong> および <strong>ARM</strong> が 本 書<br />
を 提 供 し た 当 事 者 と の 間 で 締 結 し た 契 約 の 条 項 に 基 づいた ラ イ セン スの 制 限 に よ り 異 な り ます。<br />
アクセス 制 限 は、 <strong>ARM</strong> 社 内 に よ る 分 類 です。<br />
製 品 ステー タ ス<br />
本 書 の 情 報 は 最 終 版 であ り 、 開 発 済 み 製 品 に 対 応 し ています。<br />
Web アドレス<br />
http://www.arm.com<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. iii<br />
Non-Confidential
iv Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
目 次<br />
<strong>RealView</strong> <strong>Compilation</strong> <strong>Tools</strong><br />
アセンブラガイ ド<br />
序 章<br />
本 書 について ................................................................................................. x<br />
フィードバック ............................................................................................ xiv<br />
第 1 章<br />
第 2 章<br />
はじめに<br />
1.1 <strong>RealView</strong> <strong>Compilation</strong> <strong>Tools</strong> アセンブラについて ...................................... 1-2<br />
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
2.1 はじめに ...................................................................................................... 2-2<br />
2.2 <strong>ARM</strong> アーキテ ク チ ャの 概 要 ....................................................................... 2-4<br />
2.3 アセン ブ リ 言 語 モジ ュールの 構 造 ............................................................ 2-13<br />
2.4 条 件 実 行 .................................................................................................... 2-20<br />
2.5 レ ジス タへの 定 数 のロー ド ....................................................................... 2-27<br />
2.6 レジスタへのアドレスのロード ................................................................ 2-36<br />
2.7 多 重 レ ジス タ ロー ド / ストア 命 令 ............................................................. 2-43<br />
2.8 マ ク ロの 使 用 ............................................................................................ 2-50<br />
2.9 シンボルバージ ョ ンの 追 加 ....................................................................... 2-54<br />
2.10 フ レームデ ィ レ ク テ ィ ブの 使 用 ................................................................ 2-55<br />
2.11 アセンブリ 言 語 に 関 する 変 更 ................................................................... 2-56<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. v<br />
Non-Confidential
目 次<br />
第 3 章<br />
第 4 章<br />
第 5 章<br />
アセン ブ ラ に 関 する 参 考 情 報<br />
3.1 コマンド 構 文 .............................................................................................. 3-2<br />
3.2 ソース 行 の 形 式 ........................................................................................ 3-23<br />
3.3 定 義 済 みのレ ジス タ および コ プ ロセ ッ サ 名 ............................................. 3-24<br />
3.4 組 み 込 み 変 数 および 定 数 .......................................................................... 3-26<br />
3.5 シンボル ................................................................................................... 3-29<br />
3.6 式 、 リ テ ラル、 演 算 子 .............................................................................. 3-35<br />
3.7 診 断 メ ッ セージ ........................................................................................ 3-49<br />
3.8 C プリプロセッサを 使 用 する ................................................................... 3-51<br />
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.1 命 令 の 概 要 .................................................................................................. 4-3<br />
4.2 メモリアクセス 命 令 ................................................................................. 4-10<br />
4.3 汎 用 デー タ 処 理 命 令 ................................................................................. 4-46<br />
4.4 乗 算 命 令 ................................................................................................... 4-77<br />
4.5 サチュレー ト 命 令 ................................................................................... 4-100<br />
4.6 並 列 命 令 ................................................................................................. 4-105<br />
4.7 パ ッ ク 命 令 と 展 開 命 令 ............................................................................ 4-113<br />
4.8 分 岐 命 令 と 制 御 命 令 ............................................................................... 4-122<br />
4.9 コ プ ロセ ッ サ 命 令 ................................................................................... 4-132<br />
4.10 その 他 の 命 令 .......................................................................................... 4-140<br />
4.11 Thumb での 命 令 の 幅 の 選 択 ................................................................... 4-159<br />
4.12 ThumbEE 命 令 ....................................................................................... 4-161<br />
4.13 疑 似 命 令 ................................................................................................. 4-165<br />
NEON と VFP プログラ ミング<br />
5.1 命 令 の 概 要 .................................................................................................. 5-3<br />
5.2 NEON と VFP 向 けのアーキテクチャサポー ト ......................................... 5-9<br />
5.3 拡 張 レ ジス タバン ク ................................................................................. 5-10<br />
5.4 条 件 コー ド ................................................................................................ 5-13<br />
5.5 一 般 的 な 情 報 ............................................................................................ 5-15<br />
5.6 NEON と VFP に 共 通 の 命 令 .................................................................... 5-24<br />
5.7 NEON 論 理 演 算 と 比 較 演 算 ...................................................................... 5-33<br />
5.8 NEON 汎 用 デー タ 処 理 命 令 ...................................................................... 5-43<br />
5.9 NEON シフ ト 命 令 .................................................................................... 5-57<br />
5.10 NEON 汎 用 算 術 命 令 ................................................................................. 5-65<br />
5.11 NEON 乗 算 命 令 ........................................................................................ 5-81<br />
5.12 NEON 要 素 と 構 造 体 のロー ド / ストア 命 令 ............................................. 5-87<br />
5.13 NEON 疑 似 命 令 および VFP 疑 似 命 令 ...................................................... 5-95<br />
5.14 NEON / VFP システムレジスタ ............................................................. 5-104<br />
5.15 ゼロク リアモード ................................................................................... 5-109<br />
5.16 VFP 命 令 ................................................................................................ 5-111<br />
5.17 VFP ベクタモード .................................................................................. 5-123<br />
vi Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
目 次<br />
第 6 章<br />
第 7 章<br />
ワイヤレス MMX テクノロジの 命 令<br />
6.1 はじめに ...................................................................................................... 6-2<br />
6.2 ワイヤレス MMX テクノロジに 対 する <strong>ARM</strong> のサポー ト ........................... 6-3<br />
6.3 ワイヤレス MMX の 命 令 ............................................................................. 6-9<br />
ディレクティブリファレンス<br />
7.1 デ ィ レ ク テ ィ ブの 一 覧 (アルフ ァ ベ ッ ト 順 ) .............................................. 7-2<br />
7.2 シンボル 定 義 デ ィ レ ク テ ィ ブ ..................................................................... 7-4<br />
7.3 データ 定 義 デ ィ レ クテ ィ ブ ....................................................................... 7-18<br />
7.4 アセンブリ 制 御 ディ レクテ ィ ブ ................................................................ 7-36<br />
7.5 Frame ディレクティブ ............................................................................. 7-46<br />
7.6 通 知 デ ィ レ ク テ ィ ブ .................................................................................. 7-65<br />
7.7 命 令 セ ッ ト と 構 文 選 択 のデ ィ レ ク テ ィ ブ ................................................. 7-73<br />
7.8 その 他 のデ ィ レ ク テ ィ ブ .......................................................................... 7-77<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. vii<br />
Non-Confidential
目 次<br />
viii Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
序 章<br />
本 章 では、 『<strong>RealView</strong> <strong>Compilation</strong> <strong>Tools</strong> アセンブラガイ ド』 ( 本 書 ) について 概<br />
説 します。 以 下 のセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「 本 書 について」 (ページ x)<br />
• 「フ ィードバッ ク」 (ページ xiv)<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. ix<br />
Non-Confidential
序 章<br />
本 書 について<br />
本 書 では、 <strong>RealView</strong> ® <strong>Compilation</strong> <strong>Tools</strong> アセンブラ (<strong>ARM</strong> アセンブラ) に 関 す<br />
るチュー ト リ アル 情 報 および 参 考 情 報 を 提 供 し ています。 独 立 型 アセンブ ラ<br />
armasm および C コンパイラや C++ コンパイラのインラインアセンブラについ<br />
て 説 明 しています。 また、 アセンブラに 指 定 できるコマンド ラインオプシ ョ<br />
ン、 アセンブ リ 言 語 プロ グ ラ ミ ングに 使 用 でき る アセンブ リ 言 語 ニーモニ ッ<br />
ク、 疑 似 命 令 、 マ ク ロ、 およびデ ィ レ ク テ ィ ブについて も 説 明 し ます。<br />
対 象 読 者<br />
本 書 は、 <strong>RealView</strong> <strong>Compilation</strong> <strong>Tools</strong> を 使 用 してアプ リ ケーシ ョ ンを 作 成 して<br />
い る 開 発 者 を 対 象 と し ています。 本 書 の 内 容 は、 『<strong>RealView</strong> <strong>Compilation</strong> <strong>Tools</strong><br />
エ ッ センシ ャルガ イ ド 』 で 説 明 さ れてい る <strong>ARM</strong> 開 発 ツールを 熟 知 し た 経 験<br />
豊 富 な ソ フ ト ウ ェア 開 発 者 を 対 象 に 書 かれています。<br />
本 書 の 構 成<br />
本 書 は 以 下 の 章 から 構 成 されています。<br />
第 1 章 はじめに<br />
<strong>ARM</strong> アセンブラおよびアセンブ リ 言 語 の 概 要 を 説 明 し ます。<br />
第 2 章 <strong>ARM</strong> アセンブ リ 言 語 の 記 述<br />
<strong>ARM</strong> アセンブラおよびアセンブリ 言 語 を 使 用 する 際 のチュート<br />
リアル 情 報 です。<br />
第 3 章 アセンブ ラ に 関 する 参 考 情 報<br />
<strong>ARM</strong> アセンブラで 使 用 でき る 言 語 の 構 文 と 体 系 について 詳 し く<br />
説 明 し ます。<br />
第 4 章 <strong>ARM</strong> 命 令 と Thumb 命 令<br />
<strong>ARM</strong> 命 令 セ ッ ト と Thumb 命 令 セ ッ ト (Thumb-2 と Thumb-2 以 前<br />
の Thumb、 および Thumb-2EE を 含 む) について 詳 し く 説 明 しま<br />
す。<br />
第 5 章 NEON と VFP プログラ ミ ング<br />
<strong>ARM</strong> NEON Technology と VFP 命 令 セ ッ ト について 詳 し く 説 明<br />
します。 また、 VFP 固 有 のアセンブ リ 言 語 に 関 する 情 報 も 提 供 し<br />
ています。<br />
x Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
序 章<br />
第 6 章 ワイヤレス MMX テクノロジの 命 令<br />
<strong>ARM</strong> のワイヤレス MMX テクノロジのサポートについて 詳 しく<br />
説 明 し ます。<br />
第 7 章 ディレクティブリファレンス<br />
<strong>ARM</strong> アセンブラ armasm で 利 用 でき る アセンブラデ ィ レ ク テ ィ ブ<br />
について 詳 し く 説 明 します。<br />
本 書 では、 <strong>ARM</strong> ソ フ ト ウ ェアがデフ ォル ト の 場 所 にイ ン ス ト ールされている<br />
ことを 前 提 としています。 例 えば、Windows 環 境 では、 標 準 設 定 の 場 所 は<br />
volume:\Program Files\<strong>ARM</strong> にな り ます。 パス 名 を 参 照 する 際 、 install_directory の<br />
部 分 を こ の 場 所 に 読 み 替 えて 下 さ い。 例 えば、 本 書 では、<br />
install_directory\Documentation\... のよ うなパス 名 が 使 用 されます。 <strong>ARM</strong> ソフ<br />
ト ウ ェ アを 別 の 場 所 にイ ン ス ト ールし た 場 合 は、 フ ァ イルパスの 見 方 を 変 え<br />
る 必 要 があ り ます。<br />
表 記 規 則<br />
本 書 では 以 下 の 表 記 規 則 を 使 用 し ています。<br />
monospace<br />
monospace<br />
コマンド、 ファイル 名 、 プログラム 名 、 ソースコードなど、<br />
キーボードから 入 力 可 能 なテキス ト を 示 しています。<br />
コ マン ド ま たはオプシ ョ ンに 使 用 可 能 な 略 語 を 示 し ます。 コマン<br />
ド 名 ま たはオプシ ョ ン 名 をすべて 入 力 する 代 わ り に、 下 線 部 分<br />
の 文 字 だけを 入 力 する こ と がで き ます。<br />
monospace italic<br />
コマン ド または 関 数 の 引 数 で、 特 定 の 値 に 置 き 換 える こ と が 可<br />
能 なものを 示 しています。<br />
monospace bold<br />
サンプルコード 以 外 に 使 用 される 言 語 キーワード を 示 していま<br />
す。<br />
italic<br />
bold<br />
重 要 事 項 、 重 要 用 語 、 相 互 参 照 、 引 用 箇 所 を 斜 体 で 記 載 し てい<br />
ます。<br />
メ ニュー 名 などのユーザインタフェース 要 素 を 太 字 で 記 載 して<br />
います。 ま た、 適 宜 記 述 リ ス ト 内 の 重 要 箇 所 と <strong>ARM</strong> プロセッサ<br />
の 信 号 名 に も 太 字 を 用 いています。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. xi<br />
Non-Confidential
序 章<br />
参 考 資 料<br />
ここでは、<strong>ARM</strong> プ ロ セ ッ サフ ァ ミ リ のコー ド 開 発 に 関 する 補 足 情 報 を 記 載 し<br />
た <strong>ARM</strong> Limited および 各 社 の 出 版 物 を 紹 介 します。<br />
<strong>ARM</strong> Limited は 自 社 出 版 物 の 定 期 的 な 更 新 ・ 修 正 を 行 っています。 最 新 の 正 誤<br />
表 、 追 補 表 、 <strong>ARM</strong> に 関 する FAQ については、<br />
http://infocenter.arm.com/help/index.jsp をご 覧 下 さい。<br />
<strong>ARM</strong> の 出 版 物<br />
本 書 では、 <strong>RealView</strong> <strong>Compilation</strong> <strong>Tools</strong> 付 属 の 開 発 ツールの 参 考 情 報 を 提 供 し<br />
ています。 こ のほか、 本 製 品 には 以 下 のマニ ュ アルが 同 梱 さ れています。<br />
• 『RVCT エッセンシャルガイド』 (<strong>ARM</strong> DUI 0202J)<br />
• 『RVCT コンパイラユーザガイド』 (<strong>ARM</strong> DUI 0205J)<br />
• 『RVCT コンパイラ リファレンスガイド』 (<strong>ARM</strong> DUI 0348J)<br />
• 『RVCT ライブラリ / 浮 動 小 数 点 サポー ト ガ イ ド 』 (<strong>ARM</strong> DUI 0349J)<br />
• 『RVCT リンカユーザガイド』 (<strong>ARM</strong> DUI 0206J)<br />
• 『RVCT リンカリファレンスガイド』 (<strong>ARM</strong> DUI 0381J)<br />
• 『RVCT ユーテ ィ リ テ ィ ガイ ド』 (<strong>ARM</strong> DUI 0382J)<br />
• 『RVCT デベロ ッ パガ イ ド 』 (<strong>ARM</strong> DUI 0203J)<br />
基 本 標 準 、 ソ フ ト ウ ェ ア イ ン タ フ ェース、 および <strong>ARM</strong> でサポー ト されてい<br />
る 標 準 に 関 する 詳 細 については、<br />
install_directory\Documentation\Specifications\... を 参 照 して 下 さい。<br />
特 定 の <strong>ARM</strong> 製 品 に 関 する 情 報 については、 以 下 のマニ ュ アルを 参 照 し て 下<br />
さい。<br />
• 『<strong>ARM</strong> アーキテクチャ リ フ ァ レンスマニュアル』 (<strong>ARM</strong>v7-A および<br />
<strong>ARM</strong>v7-R エデ ィ シ ョ ン) (<strong>ARM</strong> DDI 0406)<br />
• 『<strong>ARM</strong>v7-M アーキテクチャ リ フ ァ レンスマニュアル』 (<strong>ARM</strong> DDI 0403)<br />
• 『<strong>ARM</strong>v6-M アーキテクチャ リ フ ァ レンスマニュアル』 (<strong>ARM</strong> DDI 0419)<br />
• 『<strong>ARM</strong> Reference Peripheral Specification』 (<strong>ARM</strong> DDI 0062)<br />
xii Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
序 章<br />
• お 使 いのハー ド ウ ェ アデバイ スの <strong>ARM</strong> データ シー ト ま たはテ ク ニカル<br />
リファレンスマニュアル<br />
他 の 出 版 物<br />
<strong>ARM</strong> アーキテ クチャに 関 する 一 般 的 な 情 報 については、 以 下 の 出 版 物 を 参 照<br />
して 下 さい。 Steve Furber, 『<strong>ARM</strong> System-on-Chip Architecture』 (2nd edition,<br />
2000), Addison Wesley, ISBN 0-201-67519-6。<br />
Intel ® ワイヤレス MMX テクノロジの 詳 細 については、 『Wireless MMX<br />
Technology Developer Guide』 (August, 2000、 Order Number: 251793-001) を 参 照<br />
して 下 さい。 このマニュアルは http://www.intel.com か ら 入 手 で き ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. xiii<br />
Non-Confidential
序 章<br />
フィードバック<br />
<strong>ARM</strong> Limited では <strong>RealView</strong> <strong>Compilation</strong> <strong>Tools</strong> および 本 書 に 関 する フ ィ ー ド<br />
バックをお 待 ちしており ます。<br />
<strong>RealView</strong> <strong>Compilation</strong> <strong>Tools</strong> に 関 する フ ィ ー ドバッ ク<br />
<strong>RealView</strong> <strong>Compilation</strong> <strong>Tools</strong> に 関 し て 問 題 があ る 場 合 は、 購 入 元 にお 問 い 合 わ<br />
せ 下 さ い。 こ の と き、 迅 速 かつ 適 切 な 対 応 を さ せて 頂 く ために、 以 下 の 情 報<br />
をご 用 意 下 さい。<br />
• お 名 前 と 会 社 名<br />
• 製 品 のシ リ アル 番 号<br />
• 製 品 の リ リ ース 情 報<br />
• プラッ ト フォームの 詳 細 (ハードウェアプラッ ト フォーム、 オペレー<br />
ティングシステムの 種 類 とバージョンなど)<br />
• 問 題 を 再 現 するサ イ ズの 小 さ な 独 立 し たサンプルコー ド<br />
• 操 作 の 目 的 と 実 際 の 動 作 に 関 する 詳 し い 説 明<br />
• 使 用 し た コ マン ド (コ マン ド ラ イ ンオプシ ョ ン を 含 む)<br />
• 問 題 を 例 示 するサンプル 出 力<br />
• ツールのバージ ョ ン 情 報 (バージ ョ ン 番 号 、 ビル ド 番 号 を 含 む)<br />
本 書 に 関 する フ ィ ー ド バ ッ ク<br />
本 書 に 関 するご 意 見 につきましては、 以 下 の 内 容 を 記 載 した 電 子 メールを<br />
errata@arm.com までお 送 り 下 さい。<br />
• マニュアル 名<br />
• 文 書 番 号<br />
• 問 題 のあ るページ 番 号<br />
• 問 題 点 の 簡 潔 な 説 明<br />
補 足 すべき 点 や 改 善 すべき 点 についてのご 提 案 もお 待 ち し てお り ます。<br />
xiv Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
第 1 章<br />
はじめに<br />
本 章 では、 <strong>RealView</strong> ® <strong>Compilation</strong> <strong>Tools</strong> 付 属 のアセンブ ラ について 概 説 し ます。<br />
以 下 のセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「<strong>RealView</strong> <strong>Compilation</strong> <strong>Tools</strong> アセンブラについて」 (ページ 1-2)<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 1-1<br />
Non-Confidential
はじめに<br />
1.1 <strong>RealView</strong> <strong>Compilation</strong> <strong>Tools</strong> アセンブラについて<br />
<strong>RealView</strong> <strong>Compilation</strong> <strong>Tools</strong> (RVCT) には、 以 下 の も のが 用 意 さ れています。<br />
• 独 立 型 アセンブ ラ armasm (このアセンブラについては 本 書 で 説 明 しま<br />
す)。<br />
• C コンパイラおよび C++ コ ンパ イ ラ に 組 み 込 まれてい る 最 適 化 イ ン ラ イ<br />
ンアセンブ ラ と 非 最 適 化 組 み 込 みアセンブ ラ。 これらはアセンブリ 命 令<br />
に 同 じ 構 文 を 使 用 し ますが、 それ 以 外 の 点 については 本 書 では 説 明 し ま<br />
せん。 イ ン ラ イ ンアセンブ ラ と 組 み 込 みアセンブ ラ の 詳 細 については、<br />
『デベロ ッ パガ イ ド 』 の 「C、 C++、 およびアセンブ リ 言 語 の 混 用 」 を 参<br />
照 して 下 さい。<br />
以 前 の リ リ ースの RVCT からアップグレードする 場 合 は、 『エッセンシャルガ<br />
イ ド 』 を 読 んで、 こ の リ リ ースの 新 機 能 と 拡 張 機 能 について 確 認 し て 下 さ い。<br />
1.1.1 <strong>ARM</strong> アセンブリ 言 語<br />
現 在 の <strong>ARM</strong> と Thumb のアセンブ ラ 言 語 は、 以 前 のバージ ョ ンの <strong>ARM</strong> アセン<br />
ブラ 言 語 および Thumb アセンブラ 言 語 よ り 優 先 されます。 この 言 語 は、 統 合<br />
アセンブラ 言 語 (UAL) と 呼 ばれるこ とがあり ます。<br />
UAL を 使 用 して 書 かれたコードは、 <strong>ARM</strong>、 Thumb-2、 または Thumb-2 以 前 の<br />
Thumb のためにアセンブルする こ とができます。 アセンブラは、 使 用 できな<br />
い 命 令 に 対 してはエラーを 発 生 させます。<br />
1.1.2 ワイヤレス MMX テクノロジの 命 令<br />
アセンブラでは、 インテル ® ワイヤレス MMX テクノロジ 命 令 をアセンブル<br />
し、 PXA270 プ ロ セ ッ サ 用 の コー ド を 開 発 する こ と がで き ます。 このプロセッ<br />
サは、 MMX 拡 張 を 採 用 し た <strong>ARM</strong>v5TE アーキテ ク チャ を 実 装 し ています。<br />
RVCT は、 ワ イ ヤレ ス MMX テクノロジ 制 御 と 単 一 命 令 複 数 データ 処 理<br />
(SIMD) データレジスタをサポート しており、 ワイヤレス MMX テクノロジ<br />
による 開 発 のための 新 しいディレクティブが 導 入 されています。 また、 ロー<br />
ド 命 令 とス トア 命 令 のサポート も 強 化 されました。 ワイヤレス MMX テクノロ<br />
ジのサポー ト に 関 する 詳 細 については、 第 6 章 ワイヤレス MMX テクノロジ<br />
の 命 令 を 参 照 して 下 さい。<br />
1-2 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
はじめに<br />
1.1.3 NEON Technology<br />
<strong>ARM</strong> NEON Technology は、 ア ド バン ス ト SIMD アーキテクチャ 拡 張 を 実 装<br />
したものです。 高 性 能 の メ デ ィ アアプ リ ケーシ ョ ン、 信 号 処 理 アプ リ ケー<br />
シ ョ ン、 および 組 み 込 みプ ロ セ ッ サを 対 象 に し た、 64 ビッ ト と 128 ビッ トの<br />
ハイブリ ッ ド SIMD テクノロジです。 <strong>ARM</strong> コ アの 一 部 と し て 実 装 されますが、<br />
独 自 の 実 行 パイ プ ラ イ ン と 、 <strong>ARM</strong> コアのレジスタバンクとは 別 のレジスタバ<br />
ンクがあります。<br />
NEON 命 令 は、 <strong>ARM</strong> と Thumb-2 コードの 両 方 で 使 用 できます。 NEON の 詳 細<br />
については、 第 5 章 NEON と VFP プログラ ミ ングを 参 照 して 下 さい。<br />
1.1.4 サンプルの 使 用 方 法<br />
本 書 では、 <strong>RealView</strong> Development Suite に 収 録 されているサンプルを 参 照 し ま<br />
す。 こ れらは、 メ イ ンサンプルデ ィ レ ク ト リ の install_directory\RVDS\Examples<br />
にあ り ます。 収 録 さ れてい る サンプルの 概 要 については、 『<strong>RealView</strong><br />
Development Suite スタートガイド』 を 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 1-3<br />
Non-Confidential
はじめに<br />
1-4 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
第 2 章<br />
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
本 章 では、 <strong>ARM</strong> ® アセンブ リ 言 語 を 記 述 する 際 の 一 般 原 則 を 説 明 し ます。 以 下<br />
のセクシ ョ ンから 構 成 されています。<br />
• 「はじ めに」 (ページ 2-2)<br />
• 「<strong>ARM</strong> アーキテ ク チャ の 概 要 」 (ページ 2-4)<br />
• 「アセンブ リ 言 語 モジ ュールの 構 造 」 (ページ 2-13)<br />
• 「 条 件 実 行 」 (ページ 2-20)<br />
• 「レジスタへの 定 数 のロード」 (ページ 2-27)<br />
• 「レジスタへのアド レスのロード」 (ページ 2-36)<br />
• 「 多 重 レ ジ ス タ ロー ド / ス ト ア 命 令 」 (ページ 2-43)<br />
• 「マ ク ロ の 使 用 」 (ページ 2-50)<br />
• 「シンボルバージ ョ ンの 追 加 」 (ページ 2-54)<br />
• 「フレームディ レ クテ ィブの 使 用 」 (ページ 2-55)<br />
• 「アセンブ リ 言 語 に 関 する 変 更 」 (ページ 2-56)<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-1<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
2.1 はじめに<br />
本 章 では、 <strong>ARM</strong> アセンブ リ 言 語 モジ ュールの 基 本 的 かつ 実 践 的 な 記 述 方 法 を<br />
説 明 し ます。 また、 <strong>ARM</strong> アセンブラ (armasm) の 機 能 についても 説 明 します。<br />
本 章 では、 <strong>ARM</strong>、 Thumb ® 、 Thumb-2、 NEON 、 VFP およびワイヤレス MMX<br />
の 各 命 令 セッ トについては 詳 し く 説 明 しません。 これらの 命 令 セッ トについ<br />
ては、 以 下 を 参 照 して 下 さい。<br />
• 第 4 章 <strong>ARM</strong> 命 令 と Thumb 命 令<br />
• 第 5 章 NEON と VFP プログラ ミ ング<br />
• 第 6 章 ワイヤレス MMX テクノロジの 命 令<br />
詳 細 については、 『<strong>ARM</strong> アーキテクチャ リ フ ァ レンスマニュアル』 を 参 照 し<br />
て 下 さい。<br />
既 に RVCT v2.1 以 前 で 使 用 さ れてい る <strong>ARM</strong> および Thumb アセンブ リ 言 語 に<br />
ついて 理 解 し ているプロ グ ラ マのために、 本 章 には、 <strong>ARM</strong> アセンブリ 言 語 の<br />
最 新 バージ ョ ン と RVCT2.1 以 前 のバージ ョ ン と の 違 いについて 説 明 し てい る<br />
セクションが 含 まれています。 詳 細 については、 「アセンブ リ 言 語 に 関 する 変<br />
更 」 (ページ 2-56) を 参 照 して 下 さい。<br />
2.1.1 サンプルコード<br />
本 章 では、 い く つかのサンプルコー ド を 紹 介 し ています。 これらの 多 くは、<br />
install_directory\RVDS\Examples\...\asm ディレク ト リに 収 録 されています。<br />
アセンブ リ 言 語 フ ァ イルのビルド と リ ンク を 行 う には、 以 下 の 手 順 を 実 行 し<br />
ます。<br />
1. コマンドプロンプトで 「armasm --debug filename.s」 と 入 力 し、 ファイル<br />
のアセンブルとデバッグテーブルの 生 成 を 実 行 し ます。<br />
2. 「armlink filename.o -o filename」 と 入 力 し、 オブジ ェ ク ト フ ァ イ ルを リ ン<br />
クして、ELF 実 行 可 能 イ メ ージを 生 成 し ます。<br />
このイメージの 実 行 とデバッグを 行 うには、 <strong>RealView</strong> 命 令 セ ッ ト シ ミ ュ レー<br />
タ (<strong>RealView</strong> ISS) などの 適 切 なデバッグターゲッ ト を 使 用 して、 <strong>RealView</strong><br />
Debugger などの 互 換 性 のあるデバッガにこのイ メージをロード します。<br />
アセンブ ラ に よ る ソース コー ド の 変 換 動 作 を 確 認 する には、 以 下 の よ う に 入<br />
力 します。<br />
fromelf -c filename.o<br />
2-2 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
armlink の 詳 細 については 『リンカユーザガイド』、 fromelf の 詳 細 については<br />
『ユーテ ィ リ テ ィ ガイ ド』 を 参 照 して 下 さい。<br />
ELF と DWARF の 詳 細 については、 www.infocenter.arm.com から 入 手 できるド<br />
キュメントの 『Application Binary Interface』 (ABI) を 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-3<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
2.2 <strong>ARM</strong> アーキテ ク チ ャの 概 要<br />
このセクションでは、 <strong>ARM</strong> アーキテ クチャについて 簡 単 に 説 明 し ます。<br />
<strong>ARM</strong> プ ロ セ ッ サは、 ロー ド と ス ト アのアーキテ ク チ ャ を 実 装 する 典 型 的 な<br />
RISC プロセッサです。 メモリにアクセスできるのは、 ロード 命 令 とストア 命<br />
令 だけです。 データ 処 理 命 令 は、 レ ジ ス タ の 内 容 に 対 し てのみ 演 算 を 行 いま<br />
す。<br />
このセクションでは、 以 下 の 内 容 について 説 明 します。<br />
• 「アーキテ クチャのバージ ョ ン」<br />
• 「<strong>ARM</strong>、 Thumb、 Thumb-2、 および Thumb-2EE の 命 令 セ ッ ト 」<br />
• 「<strong>ARM</strong>、 Thumb、 および ThumbEE 状 態 」 (ページ 2-5)<br />
• 「プロセ ッ サモード」 (ページ 2-6)<br />
• 「レジスタ」 (ページ 2-7)<br />
• 「 命 令 セ ッ ト の 概 要 」 (ページ 2-9)<br />
• 「 命 令 の 機 能 」 (ページ 2-11)<br />
2.2.1 アーキテクチャのバージ ョ ン<br />
本 書 に 掲 載 さ れてい る 情 報 と サンプルは、 <strong>ARM</strong>v4 以 上 のアーキテ ク チャ を 実<br />
装 したプロセッサが 使 用 されているこ とを 前 提 と しています。 上 記 のプ ロ<br />
セッサでは、 32 ビットのアドレス 範 囲 を 使 用 します。 各 アーキテクチャバー<br />
ジョンの 詳 細 については、『<strong>ARM</strong> アーキテクチャ リ フ ァ レンスマニュアル』<br />
を 参 照 して 下 さい。<br />
2.2.2 <strong>ARM</strong>、 Thumb、 Thumb-2、 および Thumb-2EE の 命 令 セ ッ ト<br />
<strong>ARM</strong> 命 令 セッ ト は、 広 範 な 演 算 の 実 行 を 可 能 にする 32 ビット 命 令 のセット<br />
です。<br />
<strong>ARM</strong>v4T 以 上 のアーキテ ク チャ では、 Thumb 命 令 セ ッ ト と 呼 ばれる 16 ビット<br />
の 命 令 セ ッ ト が 定 義 されています。 この 命 令 セッ トでは、32 ビッ ト <strong>ARM</strong> 命 令<br />
セ ッ ト のほ と んどの 機 能 を 使 用 でき ますが、 一 部 の 処 理 には 他 の 命 令 が 必 要<br />
にな り ます。 Thumb 命 令 セ ッ ト では、 パフ ォーマン ス と 引 き 換 えに 優 れた<br />
コード 密 度 を 実 現 しています。<br />
<strong>ARM</strong>v6T2 には、 Thumb 命 令 セ ッ ト の メ ジ ャーア ッ プデー ト であ る Thumb-2<br />
が 定 義 されています。 <strong>ARM</strong> 命 令 セ ッ ト と ほぼ 同 一 の 機 能 が 提 供 さ れます。 16<br />
ビット 命 令 と 32 ビ ッ ト 命 令 を 備 え、 <strong>ARM</strong> に 類 似 し たパフ ォーマン ス と<br />
Thumb に 類 似 したコード 密 度 を 両 立 しています。<br />
2-4 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
<strong>ARM</strong>v7 には、 Thumb-2 Execution Environment (Thumb-2EE) が 定 義 されてい<br />
ます。 Thumb-2EE 命 令 セ ッ ト は、 Thumb-2 をベースに、 動 的 に 生 成 される<br />
コー ド (つま り 、 実 行 直 前 か 実 行 中 にデバ イ スで コ ンパイル さ れる コー ド )<br />
に 合 わせた 変 更 や 追 加 が 行 われています。<br />
詳 細 については、 「 命 令 セ ッ ト の 概 要 」 (ページ 2-9) を 参 照 して 下 さい。<br />
2.2.3 <strong>ARM</strong>、 Thumb、 および ThumbEE 状 態<br />
<strong>ARM</strong> 命 令 を 実 行 中 のプロセッサは、 <strong>ARM</strong> 状 態 で 動 作 し ています。 また、<br />
Thumb 命 令 を 実 行 中 のプ ロ セ ッ サは、 Thumb 状 態 で 動 作 し ています。<br />
ThumbEE 命 令 を 実 行 中 のプ ロ セ ッ サは、 ThumbEE 状 態 で 動 作 し ています。 プ<br />
ロセッサは、 Jazelle 状 態 と 呼 ばれる 別 の 状 態 でも 動 作 できます。<br />
一 方 の 状 態 のプロセ ッ サで 他 方 の 命 令 セ ッ ト の 命 令 を 実 行 する こ と はでき ま<br />
せん。 例 えば、 <strong>ARM</strong> 状 態 のプ ロ セ ッ サでは Thumb 命 令 を 実 行 でき ません。 ま<br />
た、 Thumb 状 態 のプ ロ セ ッ サでは <strong>ARM</strong> 命 令 を 実 行 で き ません。 このため、 現<br />
在 の 状 態 とは 異 なる 命 令 セ ッ ト の 命 令 をプロセ ッサが 受 け 取 ら ないよ う にす<br />
る 必 要 があ り ます。<br />
大 部 分 の <strong>ARM</strong> プロセッサでは、 必 ず <strong>ARM</strong> 状 態 で コー ド の 実 行 を 開 始 し ま<br />
す。 ただし、 Thumb コード しか 実 行 できないプロセッサや、 Thumb 状 態 で 開<br />
始 する よ う に 設 定 で き る プ ロ セ ッ サ も あ り ます。<br />
状 態 の 切 り 替 え<br />
各 命 令 セ ッ ト には、 プ ロ セ ッ サ 状 態 を 変 更 する 命 令 があ り ます。<br />
<strong>ARM</strong> 状 態 と Thumb 状 態 と の 切 り 替 え を 行 う には、 <strong>ARM</strong> または THUMB ディレク<br />
ティブを 使 用 して、 正 しいオペコードを 生 成 するアセンブラモードに 切 り 替<br />
え る 必 要 があ り ます。 Thumb-2EE コー ド を 生 成 するには、 THUMBX ディレクティ<br />
ブを 使 用 し ます (CODE32 および CODE16 を 使 用 するアセンブラ コードはアセン<br />
ブラによってアセンブルできますが、 新 しいコードには <strong>ARM</strong> および THUMB を 使<br />
用 する こ と をお 勧 め し ます)。<br />
詳 細 については、 「 命 令 セ ッ ト と 構 文 選 択 のデ ィ レ ク テ ィ ブ」 (ページ 7-73)<br />
を 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-5<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
2.2.4 プロセッサモード<br />
<strong>ARM</strong> プロセッサは、 アーキテクチャのバージョ ンに 応 じて、 さまざまなプロ<br />
セッサモードをサポート します ( 表 2-1 を 参 照 )。<br />
注<br />
<strong>ARM</strong>v6-M と <strong>ARM</strong>v7-M では、 他 の <strong>ARM</strong> プロセッサと 同 じモードをサポート<br />
していません。 このセクションの 内 容 は、 <strong>ARM</strong>v6-M および <strong>ARM</strong>v7-M には 適<br />
用 されません。<br />
表 2-1 <strong>ARM</strong> プロセッサモード<br />
プロセッサモード アーキテクチャ モード 番 号<br />
ユーザ すべて 0b10000<br />
FIQ - 高 速 割 り 込 み 要 求 すべて 0b10001<br />
IRQ - 割 り 込 み 要 求 すべて 0b10010<br />
スーパーバイザ すべて 0b10011<br />
アボー ト すべて 0b10111<br />
未 定 義 すべて 0b11011<br />
システム <strong>ARM</strong>v4 以 上 0b11111<br />
監 視 Security Extensions のみ 0b10110<br />
ユーザモード 以 外 のモードはすべて 特 権 モード と 呼 ばれます。 特 権 モー ド で<br />
は、 シ ステム リ ソースにフルア ク セスする こ と ができ、 モー ド を 自 由 に 変 更<br />
するこ とができます。<br />
通 常 、 タ ス ク 保 護 が 必 要 なアプ リ ケーシ ョ ンはユーザモー ド で 実 行 さ れます。<br />
組 み 込 みアプ リ ケーシ ョ ンの 中 には、 スーパーバイ ザモー ド ま たはシ ス テム<br />
モー ド だけで 実 行 さ れる も の も あ り ます。<br />
ユーザモード 以 外 のモードは、 例 外 を 処 理 したり、 特 権 リ ソースにアクセス<br />
し た り する 目 的 で 使 用 されます。 詳 細 については、 『デベロ ッ パガ イ ド 』 の<br />
第 6 章 プ ロ セ ッ サ 例 外 処 理 を 参 照 して 下 さい。<br />
2-6 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
2.2.5 レジスタ<br />
<strong>ARM</strong> プロセッサには 37 本 のレジス タがあ り ます。 これらのレジスタは、 部 分<br />
的 に 重 複 し たバン ク に 配 置 さ れます。 プロセッサモードごとに 異 なるレジス<br />
タバンクが 使 用 されます。 プ ロ セ ッ サ 例 外 と 特 権 命 令 を 処 理 する 際 、 バン ク<br />
レ ジ ス タ に よ って 高 速 な コ ンテキ ス ト ス イ ッ チが 可 能 にな り ます。 レジスタ<br />
バンクの 構 成 については、 『<strong>ARM</strong> アーキテクチャ リ フ ァ レンスマニュアル』<br />
を 参 照 して 下 さい。<br />
以 下 のレ ジ ス タ を 使 用 で き ます。<br />
• 「30 本 の 汎 用 32 ビッ トレジスタ」<br />
• 「プロ グ ラ ムカ ウ ン タ (PC)」<br />
• 「アプ リ ケーシ ョ ンプ ロ グ ラ ム 状 態 レ ジ ス タ (APSR)」 (ページ 2-8)<br />
• 「セーブ ド プロ グ ラ ム 状 態 レジス タ (SPSR)」 (ページ 2-9)<br />
30 本 の 汎 用 32 ビットレジスタ<br />
現 在 のプ ロ セ ッ サモー ド に 応 じ て、 一 度 に 15 本 までの 汎 用 レジスタが 認 識 さ<br />
れます。 これらは r0 ~ -r12、 sp、 および lr です。<br />
sp (r13) は スタックポインタです。 C コンパイラと C++ コンパイラでは、 必<br />
ず sp がス タ ッ ク ポ イ ン タ と し て 使 用 さ れます。 Thumb-2 では、 sp はスタ ッ ク<br />
ポインタ と して 厳 密 に 定 義 されているため、 スタ ッ ク 操 作 を 行 わない 多 く の<br />
命 令 で sp が 使 用 さ れてい る 場 合 、 その 動 作 は 予 測 不 能 です。 汎 用 レ ジ ス タ と<br />
して sp を 使 用 する こ と は 推 奨 さ れていません。<br />
ユーザモード では、 lr (r14) がリンクレジスタとして 使 用 され、サブルーチ<br />
ン 呼 び 出 し が 実 行 さ れた と きに 復 帰 ア ド レ スが r14 にス ト アされます。 復 帰 ア<br />
ドレスがスタックにストアされる 場 合 は、r14 を 汎 用 レジス タ と して 使 用 する<br />
こともできます。<br />
例 外 処 理 モー ド では、 lr に 例 外 の 復 帰 ア ド レ ス ( 例 外 内 でサブルーチン 呼 び<br />
出 し が 実 行 さ れる 場 合 はサブルーチンの 復 帰 ア ド レ ス) がス ト ア さ れます。<br />
復 帰 ア ド レ スがス タ ッ ク にス ト ア さ れる 場 合 は、 lr を 汎 用 レジス タ と して 使<br />
用 でき ます。<br />
プログラムカウンタ (PC)<br />
プログラムカウンタは、 pc (r15) と してアクセスされます。 プログラムカウ<br />
ンタは、 <strong>ARM</strong> 状 態 では 1 命 令 ご と に 1 ワード (4 バイ ト) ずつインク リ メン<br />
トされ、Thumb 状 態 では 実 行 される 命 令 のサイ ズの 分 だけ イ ン ク リ メ ン ト さ<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-7<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
れます。 分 岐 命 令 は、 デス テ ィ ネーシ ョ ンア ド レ ス をプ ロ グ ラ ム カ ウ ン タ に<br />
ロード します。 プログラムカウンタは、 データ 処 理 命 令 を 使 用 して 直 接 ロー<br />
ドするこ ともできます。 例 えば、 サブルーチンか ら 戻 る 場 合 には、 以 下 の コ<br />
マンドを 使 用 して、 リ ンクレジスタをプログラムカウンタにコピーできます。<br />
MOV pc,lr<br />
現 在 実 行 中 の 命 令 のア ド レ スは、 pc にはス ト ア されません。 通 常 、 実 行 中 の<br />
命 令 のア ド レ スは、 <strong>ARM</strong> 命 令 では pc-8、 Thumb 命 令 では pc-4 にな り ます。<br />
アプリケーシ ョ ンプログラム 状 態 レジスタ (APSR)<br />
APSR は、 論 理 演 算 装 置 (ALU) ステータスフラグのコピーをス ト アします。<br />
ALU ス テータ ス フ ラ グ よ って、 条 件 命 令 を 実 行 する かど う かが 決 ま り ます。<br />
詳 細 については、 「 条 件 実 行 」 (ページ 2-20) を 参 照 して 下 さい。<br />
<strong>ARM</strong>v5TE と <strong>ARM</strong>v6 以 上 のアーキテ ク チ ャ では、 Q フラグも APSR に 保 持 さ<br />
れます (「ALU ステータスフラグ」 (ページ 2-21) を 参 照 )。<br />
<strong>ARM</strong>v6 以 上 のアーキテ ク チャ では、 GE フラグも APSR に 保 持 されます (「 並<br />
列 加 算 と 並 列 減 算 」 (ページ 4-106) を 参 照 )。<br />
これらのフラグには、MSR および MRS 命 令 を 使 用 してすべてのモードでアクセ<br />
スできます。 詳 細 については、 「MRS」 (ページ 4-143) および「MSR」 (ペー<br />
ジ 4-145) を 参 照 して 下 さい。<br />
カレントプログラム 状 態 レジスタ (CPSR)<br />
CPSR には 以 下 の 情 報 が 保 持 さ れます。<br />
• APSR フラグ<br />
• 現 在 のプ ロ セ ッ サモー ド<br />
• 割 り 込 みディセーブルフラグ<br />
• 現 在 のプ ロ セ ッ サ 状 態 (<strong>ARM</strong>、 Thumb、 ThumbEE、 または Jazelle)<br />
• IT ブロッ クの 実 行 状 態 ビッ ト<br />
実 行 状 態 ビ ッ ト は、 IT ブ ロ ッ ク での 条 件 実 行 を 制 御 し (「IT」 (ページ 4-127)<br />
を 参 照 )、 <strong>ARM</strong>v6T2 以 降 でのみ 使 用 で き ます。<br />
APSR フ ラ グのみがすべてのモー ド でア ク セス 可 能 です。 CPSR の 残 り のビ ッ<br />
トには、MSR および MRS 命 令 を 使 用 して 特 権 モードでのみアクセスできます。<br />
詳 細 については、 「MRS」 (ページ 4-143) および 「MSR」 (ページ 4-145) を<br />
参 照 し て 下 さ い。<br />
2-8 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
セーブ ド プログラム 状 態 レジスタ (SPSR)<br />
SPSR は、 例 外 発 生 時 に CPSR を 保 持 する 目 的 で 使 用 さ れます。 各 例 外 処 理<br />
モード では、 1 つの SPSR にアクセスできます。 ユーザモード と システムモー<br />
ド は 例 外 処 理 モー ド ではないため、 SPSR を 利 用 できません。 詳 細 について<br />
は、 『デベロ ッ パガ イ ド 』 の 第 6 章 プ ロ セ ッ サ 例 外 処 理 を 参 照 して 下 さい。<br />
2.2.6 命 令 セ ッ ト の 概 要<br />
すべての <strong>ARM</strong> 命 令 の 長 さ は 32 ビットです。 これら の 命 令 はワー ド 境 界 で 整<br />
列 されて 保 持 されるため、 <strong>ARM</strong> 状 態 では 命 令 ア ド レ スの 最 下 位 2 ビッ トが 常<br />
にゼロにな り ます。<br />
Thumb、 Thumb-2、 および Thumb-2EE 命 令 の 長 さ は 16 ビットまたは 32 ビッ<br />
トのいずれかです。 Thumb 命 令 はハーフ ワー ド 境 界 でス ト ア さ れます。 命 令 の<br />
中 には、 ア ド レ スの 最 下 位 ビ ッ ト を 使 用 し て、 分 岐 先 の コー ド が Thumb コー<br />
ドか <strong>ARM</strong> コー ド かを 決 定 する も の も あ り ます。<br />
Thumb-2 が 導 入 される まで、 Thumb 命 令 セ ッ ト は、 <strong>ARM</strong> 命 令 セ ッ ト の 機 能 の<br />
一 部 のサブセ ッ ト に し か 対 応 し ていませんで し た。 これは、 ほぼすべての<br />
Thumb 命 令 が 16 ビッ トであったためです。 Thumb-2 命 令 セ ッ ト の 機 能 は、<br />
<strong>ARM</strong> 命 令 セ ッ ト の 機 能 と ほぼ 同 等 です。<br />
<strong>ARM</strong>v6 以 上 のアーキテ ク チ ャ では、 すべての <strong>ARM</strong> 命 令 および Thumb 命 令 は<br />
リトルエンディアンです。<br />
<strong>ARM</strong> 命 令 と Thumb 命 令 の 構 文 の 詳 細 については、 第 4 章 <strong>ARM</strong> 命 令 と Thumb<br />
命 令 を 参 照 して 下 さい。<br />
<strong>ARM</strong> 命 令 と Thumb 命 令 は、 以 下 の 機 能 グループに 分 類 で き ます。<br />
• 「 分 岐 命 令 と 制 御 命 令 」<br />
• 「データ 処 理 命 令 」 (ページ 2-10)<br />
• 「 単 一 レ ジ ス タ ロー ド / ス ト ア 命 令 」 (ページ 2-10)<br />
• 「 多 重 レ ジ ス タ ロー ド / ス ト ア 命 令 」 (ページ 2-10)<br />
• 「ス テータ ス レ ジ ス タ ア ク セ ス 命 令 」 (ページ 2-10)<br />
• 「コプロセッサ 命 令 」 (ページ 2-10)<br />
分 岐 命 令 と 制 御 命 令<br />
こ れら の 命 令 は 以 下 の 目 的 に 使 用 さ れます。<br />
• サブルーチンに 分 岐 する。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-9<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
• 逆 方 向 に 分 岐 し てループを 形 成 する。<br />
• 条 件 付 き 構 造 内 で 順 方 向 に 分 岐 する。<br />
• 後 続 の 命 令 を 分 岐 のない 条 件 命 令 にする。<br />
• プロセッサの <strong>ARM</strong> 状 態 と Thumb 状 態 を 切 り 替 え る。<br />
デー タ 処 理 命 令<br />
データ 処 理 命 令 は 汎 用 レ ジ ス タ に 対 し て 演 算 を 実 行 し ます。 このグループの<br />
命 令 は、 2 本 のレ ジ ス タ の 内 容 に 対 し て 加 算 、 減 算 、 ビ ッ ト ご と の 論 理 演 算<br />
などを 実 行 し、 3 本 目 のレ ジ ス タ にその 結 果 を 返 すこ と がで き ます。 これらの<br />
命 令 は、 単 一 レ ジ ス タ の 値 や、 レ ジ ス タ の 値 と 命 令 内 で 渡 さ れる 定 数 (イ ミ<br />
ディエート 値 ) に 対 し て 演 算 を 実 行 する こ と も で き ます。<br />
Long 乗 算 命 令 は、 64 ビッ トの 結 果 を 2 本 のレジス タに 分 けて 返 し ます。<br />
単 一 レ ジス タ ロー ド / ストア 命 令<br />
単 一 レ ジ ス タ ロー ド / ストア 命 令 は、 単 一 レジスタとメモリとの 間 で 値 の<br />
ロード またはス ト アを 行 います。 これらの 命 令 を 使 用 して、 32 ビッ トワード、<br />
16 ビットハーフワード、 または 8 ビッ ト 符 号 なしバイトのロードまたはスト<br />
アを 行 う こ とができます。 ま た、 バイ ト と ハーフ ワー ド の ロー ド を 符 号 拡 張<br />
またはゼロ 拡 張 にするこ とによ り、 32 ビットレジスタを 充 填 できます。<br />
また、 いくつかの 命 令 は、64 ビッ トダブルワードの 値 を 2 本 の 32 ビッ トレジ<br />
ス タに 分 けて ロード またはス ト アでき る よ う に 定 義 されています。<br />
多 重 レ ジス タ ロー ド / ストア 命 令<br />
多 重 レ ジ ス タ ロー ド / ストア 命 令 は、 汎 用 レジスタのサブセットをメモリか<br />
らロードするか、 メモリにストアします。 こ れ ら の 命 令 の 詳 細 については、<br />
「 多 重 レ ジ ス タ ロー ド / ストア 命 令 」 (ページ 2-43) を 参 照 して 下 さい。<br />
ステータスレジスタアクセス 命 令<br />
ステータスレジスタアクセス 命 令 は、 ステータスレジスタの 内 容 を 汎 用 レジ<br />
スタとの 間 で 転 送 します。<br />
コプロセッサ 命 令<br />
コプロセッサ 命 令 は、 <strong>ARM</strong> アーキテ ク チャ の 一 般 的 な 拡 張 方 法 をサポー ト し<br />
ます。<br />
2-10 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
2.2.7 命 令 の 機 能<br />
こ のセ ク シ ョ ンは 以 下 のサブセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「 条 件 実 行 」<br />
• 「レジスタへのアクセス」<br />
• 「インラインバレルシフタへのアクセス」 (ページ 2-12)<br />
条 件 実 行<br />
ほぼすべての <strong>ARM</strong> 命 令 は、 APSR 内 の ALU ステータスフラグの 値 に 基 づい<br />
て 条 件 実 行 で き ます。 分 岐 を 使 用 して 条 件 命 令 をスキップする 必 要 はあ り ま<br />
せんが、 一 連 の 命 令 が 同 じ 条 件 に 依 存 する 場 合 はそのよ う にし た 方 がよいこ<br />
ともあります。<br />
Thumb-2 以 前 のプ ロ セ ッ サの Thumb 状 態 では、 条 件 分 岐 が 条 件 実 行 用 の 唯 一<br />
のメカニズムです。 ほ と んどのデータ 処 理 命 令 は、ALU フラグを 更 新 します。<br />
通 常 、 命 令 が ALU フ ラ グ を 更 新 する かど う かを 指 定 する こ と はで き ません。<br />
Thumb-2 では、 同 じ ALU フラグと IT (If-Then) 命 令 を 使 用 し て、 条 件 実 行<br />
に 代 わる メ カニズムを 提 供 し ます。 IT は 16 ビット 命 令 で、 この 命 令 を 使 用 す<br />
ると 最 大 4 つの 条 件 実 行 を 行 う こ と がで き ます。 条 件 実 行 の メ カニズム を 提 供<br />
する 命 令 は、 他 にもいくつかあ り ます。<br />
<strong>ARM</strong> および Thumb-2 コードでは、 データ 処 理 命 令 が ALU フラグを 更 新 する<br />
かど うかを 指 定 できます。 ある 2 つの 命 令 の 間 に 多 数 の 非 フ ラ グ 設 定 命 令 が 存<br />
在 する 場 合 で も、 一 方 の 命 令 で 設 定 さ れた ALU フ ラ グ を 使 用 し て 他 方 の 命 令<br />
の 実 行 を 制 御 でき ます。<br />
詳 細 については、 「 条 件 実 行 」 (ページ 2-20) を 参 照 して 下 さい。<br />
レジスタへのアクセス<br />
<strong>ARM</strong> 状 態 では、 すべての 命 令 が r0 ~ r14 にアクセスできます。 また、 ほとん<br />
どの 命 令 が pc (r15) にもアクセスできます。 MRS 命 令 と MSR 命 令 を 使 用 し て ス<br />
テータ ス レ ジ ス タ の 内 容 を 汎 用 レ ジ ス タ に 移 動 し、 通 常 のデータ 処 理 命 令 に<br />
よってその 内 容 を 操 作 する こ とができます。 詳 細 については、 「MRS」 (ペー<br />
ジ 4-143) および 「MSR」 (ページ 4-145) を 参 照 して 下 さい。<br />
Thumb-2 プロセッサの Thumb 状 態 で も 同 様 の 機 能 が 提 供 さ れますが、 重 要 度<br />
が 低 い sp および pc へのア ク セスは 許 可 されない 場 合 があ り ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-11<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
Thumb-2 以 前 のプ ロ セ ッ サの Thumb 命 令 は、 その 大 半 が r0 ~ r7 以 外 のレ ジ<br />
スタにアクセスできません。 少 数 の 命 令 のみが r8 ~ r15 にアクセスできます。<br />
レジスタ r0 ~ r7 は Lo レジスタと 呼 ばれ、 レジスタ r8 ~ r15 は Hi レジスタ と<br />
呼 ばれます。<br />
インラインバレルシフタへのアクセス<br />
<strong>ARM</strong> 論 理 演 算 装 置 には、 シ フ ト 演 算 と ロ テー ト 演 算 を 可 能 にする 32 ビット<br />
のバレルシフ タがあ り ます。 多 くの <strong>ARM</strong> および Thumb-2 データ 処 理 命 令 と 単<br />
一 レ ジ ス タデータ 転 送 命 令 の 第 2 オペラ ン ド は、 データ 処 理 またはデータ 転<br />
送 の 実 行 前 に、 それぞれの 命 令 の 中 でシフ ト でき ます。 これによ り、 以 下 の<br />
よ う な こ と が 可 能 にな り ます。<br />
• 位 取 り ア ド レ シング<br />
• 定 数 に よ る 乗 算<br />
• 定 数 の 構 成<br />
バレルシフタを 使 用 した 定 数 の 生 成 については、 「レジスタへの 定 数 のロー<br />
ド」 (ページ 2-27) を 参 照 して 下 さい。<br />
Thumb-2 命 令 は、 <strong>ARM</strong> 命 令 と 同 様 のバレルシフ タへのア ク セス を 提 供 し ま<br />
す。<br />
Thumb2 以 前 の Thumb 命 令 セッ ト は、 他 の 命 令 を 使 用 しない 限 りバレルシフ<br />
タにアクセスできません。<br />
2-12 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
2.3 アセン ブ リ 言 語 モジ ュールの 構 造<br />
アセンブ リ 言 語 とは、 オブジェ ク ト コード を 生 成 するために、 <strong>ARM</strong> アセンブ<br />
ラ (armasm) が 解 析 およびアセンブルする 言 語 です。 デフォル ト では、 アセン<br />
ブラはソースコードが <strong>ARM</strong> アセンブ リ 言 語 で 記 述 さ れてい る こ と を 前 提 と<br />
しています。<br />
armasm は、 以 前 のバージ ョ ンの <strong>ARM</strong> アセンブ リ 言 語 で 記 述 されたソースコー<br />
ドも 認 識 します。 こ の 場 合 、 以 前 のバージ ョ ンで 記 述 さ れてい る こ と を 示 す<br />
必 要 はあ り ません。<br />
また、armasm は、 UAL 以 前 の Thumb アセンブ リ 言 語 で 記 述 されたソースコー<br />
ドも 認 識 します。 この 場 合 は、--16 コ マン ド ラ イ ンオプシ ョ ン を 使 用 する か、<br />
ソースコードで CODE16 デ ィ レ ク テ ィ ブを 使 用 し て、 armasm に 示 す 必 要 があ り<br />
ます。 UAL 以 前 の Thumb アセンブ リ 言 語 は、 Thumb-2 命 令 をサポー ト し ませ<br />
ん。<br />
このセ ク シ ョ ンでは、 以 下 の 内 容 について 説 明 し ます。<br />
• 「アセンブ リ 言 語 ソースフ ァ イルのレ イアウ ト 」<br />
• 「<strong>ARM</strong> アセンブ リ 言 語 モジュールのサンプル」 (ページ 2-16)<br />
• 「サブルーチンの 呼 び 出 し」 (ページ 2-18)<br />
2.3.1 アセンブリ 言 語 ソースフ ァイルのレイアウト<br />
以 下 はアセンブ リ 言 語 で 記 述 する ソース 行 の 汎 用 形 式 です。<br />
{label} {instruction|directive|pseudo-instruction} {;comment}<br />
注<br />
ラベルが 指 定 さ れていない 場 合 で も、 命 令 、 疑 似 命 令 、 およびデ ィ レ ク テ ィ<br />
ブの 前 には、 スペースやタブなどのホ ワ イ ト スペース を 挿 入 する 必 要 があ り<br />
ます。<br />
ディレクティブの 中 には、 ラベルの 使 用 を 禁 止 しているものもあります。<br />
このソース 行 の 3 つのセ ク シ ョ ンはすべてオプシ ョ ンです。 コー ド を 読 みやす<br />
く する ために 空 白 行 を 使 用 する こ と も で き ます。<br />
大 文 字 と 小 文 字 の 規 則<br />
命 令 ニーモニ ッ ク 、 デ ィ レ ク テ ィ ブ、 およびシンボルレ ジ ス タ 名 は、 大 文 字<br />
と 小 文 字 のど ち ら で 記 述 する こ と も で き ますが、 大 文 字 と 小 文 字 を 混 ぜる こ<br />
とはできません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-13<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
行 の 長 さ<br />
ソース フ ァ イルを 読 みやす く する には、 行 末 にバ ッ ク ス ラ ッ シ ュ (\) を 挿 入<br />
して 長 いソース 行 を 複 数 行 に 分 割 し ます。 バックスラッシュの 後 には 文 字<br />
(スペースやタ ブ も 含 む) を 挿 入 し ないで 下 さ い。 アセンブラは、 バッ クス<br />
ラ ッ シュ と それに 続 く 行 末 シーケンスをホワ イ ト スペース と して 処 理 し ます。<br />
注<br />
引 用 符 で 囲 まれた 文 字 列 内 でバ ッ ク ス ラ ッ シ ュ と それに 続 く 行 末 シーケ ン ス<br />
を 使 用 しないで 下 さい。<br />
バックスラッシュを 使 用 した 拡 張 も 含 め、 行 の 長 さは 4095 文 字 までに 制 限 さ<br />
れています。<br />
ラベル<br />
ラベルは、 アドレスを 表 すシンボルです。 ラベルで 指 定 さ れたア ド レ スはア<br />
センブ リ 時 に 計 算 さ れます。<br />
アセンブラは、 ラベルが 定 義 されているセクシ ョ ンの 起 点 を 基 準 と してラベ<br />
ルのア ド レ スを 計 算 し ます。 同 じセクシ ョ ン 内 のラベルへの 参 照 には、 プロ<br />
グラムカウンタにオフセッ トを 加 算 した 値 、 またはプログラムカウンタから<br />
オフセッ ト を 減 算 した 値 を 使 用 できます。 これをプログラム 相 対 アドレシン<br />
グ と 呼 びます。<br />
他 のセ ク シ ョ ンに 含 まれる ラベルのア ド レ スは リ ン ク 時 ( リ ンカによ って 各<br />
セ ク シ ョ ンに メ モ リ 内 の 特 定 の 位 置 が 割 り 当 て られた と き) に 計 算 されます。<br />
ローカルラベル<br />
ローカルラベルは、 ラベルのサブク ラスです。 ローカルラベルは 0 ~ 99 の 範<br />
囲 の 数 で 始 ま り ます。 他 の ラベル と は 異 な り 、 ローカルラベルは 複 数 回 定 義<br />
できます。 ローカルラベルはマクロを 使 用 してラベルを 生 成 する と きに 便 利<br />
です。 アセンブ ラ はローカルラベルへの 参 照 を 検 出 する と 、 その ローカル ラ<br />
ベルに 近 い イ ン ス タ ン スに 参 照 を リ ン ク し ます。<br />
ローカル ラベルの 有 効 範 囲 は、 AREA ディレクティブによって 制 限 されます。<br />
ROUT デ ィ レ ク テ ィ ブを 使 用 する と 、 こ の 有 効 範 囲 を さ ら に 厳 密 に 制 限 で き ま<br />
す。<br />
以 下 に 関 する 詳 細 については、 「ローカルラベル」 (ページ 3-33) を 参 照 して<br />
下 さい。<br />
• ローカルラベル 宣 言 の 構 文<br />
2-14 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
• アセンブラがローカルラベルへの 参 照 と ラベルを 関 連 付 ける 方 法<br />
コメント<br />
行 内 の 最 初 のセ ミ コ ロ ンは、 文 字 列 定 数 の 中 に 出 現 する 場 合 を 除 き、 コ メ ン<br />
ト の 開 始 を 意 味 します。 その 行 の 終 わ り がコ メ ン ト の 終 わ り にな り ます。 コ メ<br />
ントのみの 行 も 有 効 です。 すべての コ メ ン ト はアセンブ ラ に よ って 無 視 さ れ<br />
ます。<br />
定 数<br />
定 数 には、 以 下 のいずれかを 使 用 でき ます。<br />
数 値<br />
ブール<br />
数 値 定 数 には 以 下 の 形 式 を 使 用 で き ます。<br />
• 10 進 数 (123 など)<br />
• 16 進 数 (0x7B など)<br />
• n_xxx :<br />
n<br />
2 ~ 9 の 基 数<br />
xxx その 基 数 の 数 値<br />
• 浮 動 小 数 点 (0.02、 123.0、 3.14159 など)<br />
シ ス テムに 浮 動 小 数 点 の VFP または NEON が 存 在 する 場 合 のみ、<br />
浮 動 小 数 点 の 数 値 を 使 用 で き ます。<br />
ブール 定 数 TRUE と FALSE は、{TRUE} および {FALSE} と 記 述 する 必 要<br />
があ り ます。<br />
文 字 文 字 定 数 は、 引 用 符 で 囲 まれた 1 つの 文 字 または 1 つのエス ケー<br />
プ 文 字 ( 標 準 C エス ケープ 文 字 を 使 用 ) で 構 成 さ れます。<br />
文 字 列<br />
文 字 列 は、 二 重 引 用 符 に 囲 まれた 文 字 と スペースで 構 成 さ れま<br />
す。 文 字 列 内 で 二 重 引 用 符 ま たは ド ル 記 号 を リ テ ラ ルテキ ス ト 文<br />
字 と し て 使 用 する 場 合 、 該 当 する 文 字 を 2 つ 続 けて 記 述 する こ と<br />
によ り 1 つの 文 字 を 表 す 必 要 があ り ます。 例 えば、 文 字 列 内 で 1<br />
つの $ を 使 用 する 場 合 は、 $$ と 記 述 する 必 要 があります。 文 字 列<br />
定 数 内 では 標 準 C エスケープシーケンスを 使 用 できます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-15<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
2.3.2 <strong>ARM</strong> アセンブリ 言 語 モジュールのサンプル<br />
例 2-1 は、 アセンブ リ 言 語 モジ ュールのい く つかの 主 要 構 成 要 素 を 示 し てい<br />
ます。 このサンプルは <strong>ARM</strong> アセンブ リ 言 語 で 記 述 されています。 このサンプ<br />
ルは、 メ イ ンサンプルデ ィ レ ク ト リ の install_directory\RVDS\Examples に<br />
armex.s という 名 前 で 収 録 されています。 このサンプルをアセンブル、 リ ン ク、<br />
および 実 行 する 方 法 については、 「サンプルコー ド」 (ページ 2-2) を 参 照 し<br />
て 下 さい。<br />
以 下 のセ ク シ ョ ンでは、 こ のサンプルの 構 成 要 素 について 詳 し く 説 明 し ます。<br />
例 2-1<br />
start<br />
stop<br />
AREA<br />
ENTRY<br />
<strong>ARM</strong>ex, CODE, READONLY<br />
; Name this block of code <strong>ARM</strong>ex<br />
; Mark first instruction to execute<br />
MOV r0, #10 ; Set up parameters<br />
MOV r1, #3<br />
ADD r0, r0, r1 ; r0 = r0 + r1<br />
MOV r0, #0x18 ; angel_SWIreason_ReportException<br />
LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit<br />
SVC #0x123456 ; <strong>ARM</strong> semihosting (formerly SWI)<br />
END<br />
; Mark end of file<br />
ELF セクションと AREA ディレクティブ<br />
ELF セクションは、 名 前 の 付 いた、 分 割 不 可 能 な 独 立 し た コー ド シーケン ス<br />
またはデータシーケンスです。 アプ リ ケーシ ョ ン を 作 成 するには 少 な く と も 1<br />
つのコード セ ク シ ョ ンが 必 要 です。<br />
アセンブ リ ま たはコ ンパ イルか ら の 出 力 には、 以 下 を 含 め る こ と がで き ます。<br />
• 1 つ 以 上 の コー ド セ ク シ ョ ン。 通 常 、 こ れらは 読 み 出 し 専 用 セ ク シ ョ ン<br />
です。<br />
• 1 つ 以 上 のデータ セ ク シ ョ ン。 通 常 、 こ れ ら は 読 み 出 しおよび 書 き 込 み<br />
用 セ ク シ ョ ンです。 ゼロで 初 期 化 (ZI) さ れる 場 合 があ り ます。<br />
2-16 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
リンカはセクション 配 置 規 則 に 基 づいて 各 セクションをプログラムイメージ<br />
内 に 配 置 し ます。 ソース フ ァ イル 内 で 隣 接 する セ ク シ ョ ンが、 アプ リ ケー<br />
ションイメージ 内 でも 隣 接 しているとは 限 りません。 リンカによるセクショ<br />
ンの 配 置 方 法 の 詳 細 については、 『リンカユーザガイド』 の 第 5 章 スキャッ<br />
タロード 記 述 ファイルの 使 用 を 参 照 して 下 さい。<br />
ソース フ ァ イルでは、 セ ク シ ョ ンの 開 始 位 置 を AREA ディレクティブによって<br />
マーク し ます。 こ のデ ィ レ ク テ ィ ブでセ ク シ ョ ンに 名 前 を 付 け、 属 性 を 設 定<br />
します。 属 性 は、 名 前 の 後 に コ ンマで 区 切 って 配 置 し ます。 AREA ディレクティ<br />
ブの 構 文 の 詳 細 については、 「AREA」 (ページ 7-81) を 参 照 して 下 さい。<br />
セ ク シ ョ ンには 任 意 の 名 前 を 指 定 でき ます。 ただし、 アルフ ァベッ ト 以 外 の<br />
文 字 で 始 ま る 名 前 は 縦 棒 で 囲 む 必 要 があ り ます。 縦 棒 で 囲 ま ない と 、 AREA<br />
name missing エラーが 生 成 されます。 例 えば、 |1_DataArea| のよ うに 記 述 しま<br />
す。<br />
例 2-1 (ページ 2-16) では、 READONLY としてマークされたコードを 含 む <strong>ARM</strong>ex<br />
と い う 名 前 の 単 一 セ ク シ ョ ン を 定 義 し ています。<br />
ENTRY ディレクティブ<br />
ENTRY ディレクティブは、 最 初 に 実 行 される 命 令 をマークします。 C コードを<br />
含 むアプ リ ケーシ ョ ンでは、 エン ト リ ポ イ ン ト が C ラ イ ブ ラ リ 初 期 化 コー ド<br />
内 にも 含 まれます。 初 期 化 コー ド と 例 外 ハン ド ラ に も エン ト リ ポ イ ン ト が 含<br />
まれます。<br />
アプ リ ケーシ ョ ンの 実 行<br />
例 2-1 (ページ 2-16) のアプリ ケーシ ョ ンコードは、 ラベル start で 実 行 を 開<br />
始 し、 10 進 数 の 10 と 3 をレジスタ r0 と r1 にロード します。 次 に、 これらの<br />
レジスタを 加 算 し、 結 果 を r0 に 返 し ます。<br />
アプ リ ケーシ ョ ンの 終 了<br />
メ イ ン コー ド の 実 行 後 、 こ のアプ リ ケーシ ョ ンは 制 御 をデバ ッ ガに 戻 すこ と<br />
によって 終 了 します。 こ の 動 作 は、 以 下 のパ ラ メ ータ を 設 定 し た <strong>ARM</strong> セミホ<br />
スティング SVC (デフ ォル ト では 0x123456) を 使 用 して 行 われます。<br />
• r0 = angel_SWIreason_ReportException (0x18)<br />
• r1 = ADP_Stopped_ApplicationExit (0x20026)<br />
『RVCT デベロ ッ パガ イ ド 』 の 第 8 章 セミホスティングを 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-17<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
END ディレクティブ<br />
このディ レ クテ ィブは、 ソースフ ァ イルの 処 理 を 停 止 する よ う アセンブラに<br />
指 示 し ます。 すべてのアセンブ リ 言 語 ソースモジ ュールは、 END ディレクティ<br />
ブが 単 独 で 記 述 さ れた 行 で 終 了 する 必 要 があ り ます。<br />
2.3.3 サブルーチンの 呼 び 出 し<br />
サブルーチン を 呼 び 出 すには、 リ ン ク 付 き 分 岐 命 令 を 使 用 し ます。 構 文 は 以<br />
下 の とお り です。<br />
BL destination<br />
destination にはサブルーチンの 最 初 の 命 令 に 付 けた ラベルを 指 定 するのが 一<br />
般 的 です。<br />
また、destination には、 プ ロ グ ラ ム 相 対 式 を 指 定 する こ と も で き ます。 詳 細 に<br />
ついては、 「B、 BL、 BX、 BLX、 BXJ」 (ページ 4-123) を 参 照 して 下 さい。<br />
BL 命 令 は 以 下 を 実 行 し ます。<br />
• リンクレジスタに 復 帰 アドレスを 配 置 する。<br />
• プ ロ グ ラ ム カ ウ ン タ にサブルーチンのア ド レ ス を 設 定 する。<br />
サブルーチン コー ド の 実 行 後 、 BX lr 命 令 を 使 用 し て 復 帰 で き ます。 原 則 と し<br />
て、 レジス タ r0 ~ r3 を 使 用 してパラ メータをサブルーチンに 渡 し、 r0 を 使 用<br />
し て 結 果 を 呼 び 出 し 側 に 返 し ます。<br />
注<br />
別 々にアセンブルま たはコ ンパ イル さ れたモジ ュール 間 の 呼 び 出 し は、 プ ロ<br />
シージ ャ コール 標 準 で 定 義 さ れてい る 制 約 条 件 や 規 則 に 準 拠 する 必 要 があ り<br />
ます。 詳 細 については、 install_directory\Documentation\Specifications\... にあ<br />
る 『Procedure Call Standard for the <strong>ARM</strong> Architecture』 (aapcs.pdf) を 参 照 して 下<br />
さい。<br />
例 2-2 (ページ 2-19) は、 2 つのパラ メ ータ 値 を 加 算 し て、 その 結 果 を r0 に 返<br />
すサブルーチンを 示 し ています。 このサンプルは、 メ インサンプルディレク<br />
トリの install_directory\RVDS\Examples に subrout.s という 名 前 で 収 録 されてい<br />
ます。 このサンプルをアセンブル、 リ ン ク、 および 実 行 する 方 法 については、<br />
「サンプルコー ド」 (ページ 2-2) を 参 照 して 下 さい。<br />
2-18 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
例 2-2<br />
AREA subrout, CODE, READONLY ; Name this block of code<br />
ENTRY<br />
; Mark first instruction to execute<br />
start MOV r0, #10 ; Set up parameters<br />
MOV r1, #3<br />
BL doadd ; Call subroutine<br />
stop MOV r0, #0x18 ; angel_SWIreason_ReportException<br />
LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit<br />
SVC #0x123456 ; <strong>ARM</strong> semihosting (formerly SWI)<br />
doadd ADD r0, r0, r1 ; Subroutine code<br />
BX lr ; Return from subroutine<br />
END<br />
; Mark end of file<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-19<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
2.4 条 件 実 行<br />
<strong>ARM</strong> 状 態 と 、 Thumb-2 をサポートするプロセッサの Thumb 状 態 では、 ほ と<br />
んどのデータ 処 理 命 令 で、 演 算 結 果 に 従 ってアプ リ ケーシ ョ ンプログラム 状<br />
態 レジスタ (APSR) 内 の ALU ステータスフラグを 更 新 するかど うかを 選 択<br />
できます。 すべてのフ ラ グ を 更 新 する 命 令 も、 サブセ ッ ト のみを 更 新 する 命<br />
令 もあり ます。 フ ラ グが 更 新 さ れない 場 合 は、 元 の 値 が 維 持 さ れます。 各 命 令<br />
の 記 述 にはフ ラ グへの 影 響 が 詳 細 に 示 されています。 実 行 さ れない 条 件 付 き<br />
命 令 は、 フ ラ グの 状 態 に 影 響 を 与 え ません。<br />
Thumb-2 以 前 のプ ロ セ ッ サの Thumb 状 態 では、 ほ と んどのデータ 処 理 命 令 が<br />
ALU ステータスフラグを 自 動 的 に 更 新 します。 フ ラ グ を 変 更 し た り 更 新 し た<br />
り し ない よ う に 指 定 する オプシ ョ ンはあ り ません。 その 他 の 命 令 では、 フ ラ<br />
グを 更 新 できません。<br />
<strong>ARM</strong> 状 態 と 、 Thumb-2 をサポートするプロセッサの Thumb 状 態 では、 以 下<br />
のいずれかの 時 点 で 別 の 命 令 に よ っ てセ ッ ト さ れた ALU ステータスフラグに<br />
基 づいて、 命 令 を 条 件 実 行 で き ます。<br />
• フ ラ グ を 更 新 し た 命 令 の 直 後<br />
• フ ラ グを 更 新 し ていない 任 意 の 数 の 命 令 の 後<br />
ほぼすべての <strong>ARM</strong> 命 令 は、 APSR 内 の ALU ステータスフラグの 状 態 に 基 づ<br />
いて 条 件 実 行 で き ます。 命 令 を 条 件 実 行 する ために 追 加 する 接 尾 文 字 の 一 覧<br />
については、 表 2-2 (ページ 2-21) を 参 照 して 下 さい。<br />
Thumb 状 態 では、 条 件 実 行 の メ カニズムは 条 件 分 岐 に よ り 使 用 で き ます。<br />
Thumb-2 に 対 応 する プ ロ セ ッ サの Thumb 状 態 では、 特 殊 な IT (If-Then) 命 令<br />
を 使 用 する こ と に よ って 条 件 命 令 を 作 成 する こ と も で き ます。 また、CBZ 命 令<br />
(ゼ ロ の 条 件 分 岐 ) および CBNZ 命 令 を 使 用 して、 レジス タの 値 をゼロ と 比 較<br />
し、 その 結 果 に 基 づいて 分 岐 する こ と も で き ます。<br />
このセクションでは、 以 下 の 内 容 について 説 明 します。<br />
• 「ALU ステータスフラグ」 (ページ 2-21)<br />
• 「 条 件 実 行 」 (ページ 2-21)<br />
• 「 条 件 実 行 の 使 用 」 (ページ 2-22)<br />
• 「 条 件 実 行 の 使 用 例 」 (ページ 2-23)<br />
• 「Q フラグ」 (ページ 2-26)<br />
2-20 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
2.4.1 ALU ステータスフラグ<br />
APSR は 以 下 の ALU ステータスフラグを 保 持 します。<br />
N<br />
Z<br />
C<br />
V<br />
演 算 結 果 が 負 の 場 合 にセ ッ ト さ れます。<br />
演 算 結 果 がゼロの 場 合 にセ ッ ト されます。<br />
演 算 の 結 果 と し てキ ャ リ ーが 発 生 し た 場 合 にセ ッ ト されます。<br />
演 算 の 結 果 と し てオーバーフ ローが 発 生 し た 場 合 にセ ッ ト さ れ<br />
ます。<br />
キャ リーは 以 下 の 場 合 に 発 生 します。<br />
• 加 算 の 結 果 が 2 32 以 上 の 場 合<br />
• 減 算 の 結 果 が 正 またはゼロの 場 合<br />
• 移 動 命 令 ま たは 論 理 命 令 に よ る イ ン ラ イ ンバレルシ フ タ 演 算 の 結 果 と し<br />
て<br />
オーバーフ ローは、 加 算 、 減 算 、 ま たは 比 較 の 結 果 が 2 31 以 上 ま たは -2 31 未 満<br />
の 場 合 に 発 生 し ます。<br />
2.4.2 条 件 実 行<br />
条 件 付 きにで き る 命 令 には、 任 意 で 条 件 コー ド を 指 定 で き ます。 構 文 の 説 明<br />
では、 条 件 コード を {cond} と 表 記 しています。 この 条 件 は、 <strong>ARM</strong> 命 令 にエン<br />
コード され、 Thumb-2 命 令 の 先 行 する IT 命 令 にエン コー ド さ れます。 条 件<br />
コードが 指 定 されている 命 令 は、 APSR の 条 件 コード フ ラ グが、 指 定 し た 条<br />
件 を 満 たしている 場 合 にのみ 実 行 されます。 表 2-2 に、 使 用 可 能 な 条 件 コー<br />
ドを 示 します。<br />
Thumb-2 以 前 のプ ロ セ ッ サの Thumb 状 態 では、 {cond} フィールドは 特 定 の 分<br />
岐 命 令 でのみ 使 用 で き ます。<br />
また、 表 2-2 は、 条 件 コー ド の 接 尾 文 字 と 、 N、 Z、 C、 および V フラグとの 関 係<br />
も 示 しています。<br />
表 2-2 条 件 コー ド の 接 尾 文 字<br />
接 尾 文 字 フ ラグ 意 味<br />
EQ Z セッ ト 等 しい<br />
NE Z クリア 等 しくない<br />
CS or HS C セ ッ ト 以 上 ( 符 号 な し >=)<br />
CC or LO C ク リ ア 未 満 ( 符 号 な し
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
表 2-2 条 件 コー ド の 接 尾 文 字 ( 続 き)<br />
接 尾 文 字 フ ラグ 意 味<br />
MI N セッ ト 負<br />
PL N クリア 正 または 0<br />
VS V セッ ト オーバーフロー<br />
VC V クリア オーバーフローなし<br />
HI C セッ トかつ Z ク リ ア よ り 大 き い ( 符 号 な し >)<br />
LS C クリアまたは Z セ ッ ト 以 下 ( 符 号 な し =<br />
LT N ≠ V 符 号 付 き <<br />
GT Z クリア、N = V 符 号 付 き ><br />
LE Z セッ ト、N ≠ V 符 号 付 き
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
<strong>ARM</strong>10 や Strong<strong>ARM</strong> ® などの 一 部 の <strong>ARM</strong> プ ロ セ ッ サには、 分 岐 予 測 ハー ド<br />
ウェアが 搭 載 されています。 こ れら のプ ロ セ ッ サを 使 用 する シ ス テムでは、<br />
予 測 を 誤 った 場 合 で も パイ プ ラ イ ン を フ ラ ッ シ ュ し て 再 充 填 するだけで 済 み<br />
ます。<br />
2.4.4 条 件 実 行 の 使 用 例<br />
この 例 は、 ユーク リ ッ ドの 最 大 公 約 数 (gcd) アルゴ リ ズムの 2 つの 実 装 を 使<br />
用 し、 条 件 実 行 に よ って コー ド 密 度 と 実 行 速 度 を 向 上 さ せる 方 法 を 示 し てい<br />
ます。 実 行 速 度 の 詳 細 分 析 は、 <strong>ARM</strong>7 プ ロ セ ッ サでのみ 実 行 で き ます。 コー<br />
ド 密 度 の 計 算 は、 すべての <strong>ARM</strong> プロセッサで 実 行 できます。<br />
C では、 こ のアルゴ リ ズム を 以 下 の よ う に 表 すこ と がで き ます。<br />
int gcd(int a, int b)<br />
{<br />
while (a != b)<br />
{<br />
if (a > b)<br />
a = a - b;<br />
else<br />
b = b - a;<br />
}<br />
return a;<br />
}<br />
以 下 の よ う に、 分 岐 の 条 件 付 き 実 行 のみを 使 用 し て gcd 関 数 を 実 装 できます。<br />
gcd CMP r0, r1<br />
BEQ end<br />
BLT less<br />
SUBS r0, r0, r1 ; could be SUB r0, r0, r1 for <strong>ARM</strong><br />
B gcd<br />
less<br />
SUBS r1, r1, r0 ; could be SUB r1, r1, r0 for <strong>ARM</strong><br />
B gcd<br />
end<br />
分 岐 を 使 用 する ため、 こ の コー ド では 7 つの 命 令 を 実 行 し ます。 分 岐 が 発 生 す<br />
る たびに、 プ ロ セ ッ サはパ イ プ ラ イ ン を 再 充 填 し て 新 し い 位 置 か ら 実 行 を 継<br />
続 する 必 要 があ り ます。 他 の 命 令 と 未 実 行 分 岐 にはそれぞれ 1 サイクルが 使 用<br />
されます。<br />
<strong>ARM</strong> 命 令 セ ッ ト の 条 件 実 行 機 能 を 使 用 する と 、 以 下 の よ う にわずか 4 つの 命<br />
令 で gcd 関 数 を 実 装 できます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-23<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
gcd<br />
CMP<br />
SUBGT<br />
SUBLE<br />
BNE<br />
r0, r1<br />
r0, r0, r1<br />
r1, r1, r0<br />
gcd<br />
コー ド サ イ ズが 小 さ く な る だけでな く 、 ほ と んどの 場 合 、 コー ド の 実 行 速 度<br />
が 向 上 し ます。 表 2-3 と 表 2-4 は、 r0 = 1 かつ r1 = 2 の 場 合 に、 各 実 装 に よ っ<br />
て 使 用 さ れる サ イ ク ル 数 を 示 し ています。 こ の 場 合 、 分 岐 を 使 用 せずに、 す<br />
べての 命 令 を 条 件 実 行 にする こ とによ り、 3 サイクルを 省 く こ とができます。<br />
条 件 実 行 を 使 用 する コー ド は、 r0 = r1 である 限 り 常 に 同 じサイ クル 数 で 実 行<br />
されます。 それ 以 外 の 場 合 は、 条 件 実 行 を 使 用 する コー ド の 方 が 少 ないサ イ<br />
クル 数 で 実 行 されます。<br />
表 2-3 条 件 分 岐 のみの 場 合<br />
r0: a r1: b 命 令 サイクル (<strong>ARM</strong>7)<br />
1 2 CMP r0, r1 1<br />
1 2 BEQ end 1 ( 実 行 さ れません)<br />
1 2 BLT less 3<br />
1 2 SUB r1, r1, r0 1<br />
1 2 B gcd 3<br />
1 1 CMP r0, r1 1<br />
1 1 BEQ end 3<br />
合 計 13<br />
表 2-4 すべての 命 令 を 条 件 実 行 する 場 合<br />
r0: a r1: b 命 令 サイクル (<strong>ARM</strong>7)<br />
1 2 CMP r0, r1 1<br />
1 2 SUBGT r0,r0,r1 1 ( 実 行 さ れません)<br />
1 1 SUBLT r1,r1,r0 1<br />
1 1 BNE gcd 3<br />
1 1 CMP r0,r1 1<br />
2-24 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
表 2-4 すべての 命 令 を 条 件 実 行 する 場 合 ( 続 き)<br />
r0: a r1: b 命 令 サイクル (<strong>ARM</strong>7)<br />
1 1 SUBGT r0,r0,r1 1 ( 実 行 さ れません)<br />
1 1 SUBLT r1,r1,r0 1 ( 実 行 さ れません)<br />
1 1 BNE gcd 1 ( 実 行 さ れません)<br />
合 計 10<br />
Thumb-2 以 前 の Thumb バージ ョ ンの gcd<br />
条 件 実 行 が 可 能 な Thumb-2 以 前 の Thumb 命 令 は B だけなので、 条 件 分 岐 を 使<br />
用 して gcd アルゴ リ ズム を 記 述 する 必 要 があ り ます。<br />
<strong>ARM</strong> コード の 条 件 分 岐 の 実 装 と 同 様 に、 Thumb-2 以 前 の Thumb コードの 場<br />
合 にも 7 個 の 命 令 が 必 要 です。 全 体 のコー ド サ イ ズは 14 バイ ト となり、 小 さ<br />
な <strong>ARM</strong> の 実 装 (16 バイ ト) と 比 較 しても 小 さ くなり ます。<br />
さらに、16 ビッ ト メモ リ を 使 用 しているシステムでは、 このバージ ョ ンの 実<br />
行 速 度 が 2 番 目 の <strong>ARM</strong> の 実 装 を 上 回 り ます。 これは、 1 つの 32 ビッ ト <strong>ARM</strong><br />
命 令 には 2 回 のフ ェ ッチが 必 要 であ るのに 対 し て、 1 つの 16 ビッ ト Thumb 命<br />
令 では 1 回 の メ モ リ ア ク セスで 済 むか ら です。<br />
Thumb-2 バージ ョ ンの gcd<br />
以 下 の よ う に IT 命 令 を 使 用 して SUB 命 令 を 条 件 実 行 し、 <strong>ARM</strong> バージ ョ ンの こ<br />
のコードを Thumb-2 コー ド に 変 換 で き ます。<br />
gcd<br />
CMP<br />
ITE<br />
SUBGT<br />
SUBLE<br />
BNE<br />
r0, r1<br />
GT<br />
r0, r0, r1<br />
r1, r1, r0<br />
gcd<br />
これをアセンブルすると <strong>ARM</strong> または Thumb-2 コードに 等 し くなり ます。 アセ<br />
ンブラは IT 命 令 をチェ ッ ク し ますが、 <strong>ARM</strong> コードへのアセンブリで 省 略 し<br />
ます (IT 命 令 は 省 略 で き ます。 アセンブラは Thumb-2 コードにアセンブルす<br />
る と き にそれ ら を 挿 入 し ます)。<br />
Thumb-2 コードでは <strong>ARM</strong> コード よ り も 命 令 が 1 つ 多 く 必 要 ですが、 全 体 の<br />
コードサイズは Thumb-2 コードは 10 バイ ト、 <strong>ARM</strong> コードは 16 バイ トです。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-25<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
実 行 速 度<br />
実 行 速 度 を 上 げる ためにコー ド を 最 適 化 するには、 命 令 の タ イ ミ ング、 分 岐<br />
予 測 ロジッ ク、 およびターゲッ ト システムのキャ ッシュ 動 作 をよ く 理 解 して<br />
お く 必 要 があ り ます。 詳 細 については、 『<strong>ARM</strong> アーキテクチャ リ フ ァ レンスマ<br />
ニュアル』 と 、 各 プ ロ セ ッ サのテ ク ニカル リ フ ァ レ ン ス マニ ュ アルを 参 照 し<br />
て 下 さい。<br />
2.4.5 Q フラグ<br />
Q フラグは、 <strong>ARM</strong>v5TE、 および <strong>ARM</strong>v6 以 上 のアーキテ ク チ ャ において、 サ<br />
チュレート 算 術 命 令 (「QADD、 QSUB、 QDADD、 QDSUB」 (ページ 4-101)<br />
を 参 照 ) でいつサチュ レーシ ョ ンが 発 生 し たか、 ま たは 特 定 の 乗 算 命 令<br />
(「SMULxy、 SMLAxy」 (ページ 4-83) と 「SMULWy、 SMLAWy」 (ページ 4-85)<br />
を 参 照 ) でいつオーバーフ ローが 発 生 し たかを 記 録 する ために 使 用 さ れます。<br />
Q フラグはスティ ッキーフラグです。 上 記 の 命 令 で Q フラグをセッ トするこ<br />
とはできますが、 ク リアするこ とはできません。 こ う した 一 連 の 命 令 を 実 行<br />
し た 後 でフ ラ グをテス ト する と、 それらの 命 令 の 実 行 中 に 発 生 し たサチュ<br />
レーシ ョ ンやオーバーフローを 検 出 でき るため、 1 つの 命 令 を 実 行 する たび<br />
にフラグをチェ ッ ク しな くても 済 みます。<br />
Q フラグをク リアするには、MSR 命 令 を 使 用 します (「MSR」 (ページ 4-145)<br />
を 参 照 )。<br />
Q フラグの 状 態 を 条 件 コードで 直 接 テス トするこ とはできません。 Q フラグの<br />
状 態 を 読 み 出 すには、 MRS 命 令 を 使 用 し ます (「MRS」 (ページ 4-143) を 参<br />
照 )。<br />
2-26 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
2.5 レ ジス タへの 定 数 のロー ド<br />
メモリからデータをロードせずに、 1 つの 命 令 で 任 意 の 32 ビッ ト 即 値 をレジ<br />
スタにロードすることはできません。 これは <strong>ARM</strong> 命 令 および Thumb-2 命 令 の<br />
長 さが 32 ビッ トしかないためです。<br />
データ ロー ド 命 令 を 使 用 し て 32 ビッ ト 値 をレジスタにロードすることはでき<br />
ますが、 多 く の 汎 用 定 数 は、 よ り 直 接 的 かつ 効 率 的 な 方 法 で ロー ド で き ます。<br />
多 く の 汎 用 定 数 は、 別 の ロー ド 命 令 を 使 用 し な く て もデータ 処 理 命 令 内 にオ<br />
ペラ ン ド と し て 直 接 含 め る こ と がで き ます。 16 ビッ トの Thumb 命 令 にオペ ラ<br />
ンドとして 含 めることができる 定 数 の 範 囲 は、 はるかに 狭 くなります。<br />
<strong>ARM</strong>v6T2 以 上 のアーキテ ク チャ では、 MOV 命 令 を 実 行 し てか ら MOVT を 実 行 す<br />
ることによって、 任 意 の 32 ビット 値 をレジスタにロードすることができま<br />
す。 また、 疑 似 命 令 の MOV32 を 使 用 して、 命 令 シーケンスを 作 成 でき ます。<br />
以 下 のセ ク シ ョ ンでは、 い く つかのロード 方 法 について 説 明 し ます。<br />
• MOV 命 令 と MVN 命 令 を 使 用 し て 特 定 範 囲 の イ ミ デ ィ エー ト 値 を ロー ド する<br />
方 法<br />
詳 細 については、 「MOV と MVN を 使 用 した 直 接 ロード」 (ページ 2-28)<br />
を 参 照 して 下 さい。<br />
• MOV32 疑 似 命 令 を 使 用 し て 任 意 の 32 ビット 定 数 をロードする 方 法<br />
詳 細 については、 「MOV32 を 使 用 したロード」 (ページ 2-32) を 参 照 し<br />
て 下 さい。<br />
• LDR 疑 似 命 令 を 使 用 し て 任 意 の 32 ビット 定 数 をロードする 方 法<br />
詳 細 については、 「LDR Rd, =const を 使 用 したロード」 (ページ 2-32) を<br />
参 照 し て 下 さ い。<br />
• 浮 動 小 数 点 定 数 を ロー ド する 方 法<br />
詳 細 については、 「 浮 動 小 数 点 定 数 の ロー ド 」 (ページ 2-35) を 参 照 し<br />
て 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-27<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
2.5.1 MOV と MVN を 使 用 した 直 接 ロード<br />
<strong>ARM</strong> と Thumb-2 では、 32 ビットの MOV 命 令 と MVN 命 令 を 使 用 し て、 広 範 囲 の<br />
定 数 値 を レ ジ ス タ に 直 接 ロー ド で き ます。<br />
16 ビットの Thumb MOV 命 令 を 使 用 する と、0 ~ 255 の 範 囲 内 にあ る 任 意 の 定 数<br />
をロードできます。 16 ビッ トの MVN 命 令 を 使 用 して 定 数 をロードする こ とは<br />
できません。<br />
「「<strong>ARM</strong> 状 態 の 即 値 」」 は、 1 つの <strong>ARM</strong> 命 令 でロードでき る 値 の 範 囲 を 示 して<br />
います。 「Thumb-2 イ ミディエート 定 数 」 (ページ 2-30) は、 1 つの Thumb-2<br />
命 令 で ロー ド で き る 値 の 範 囲 を 示 し ています。<br />
MOV と MVN のど ち ら を 使 用 する かを 決 め る 必 要 はあ り ません。 アセンブラがど<br />
ちらか 適 切 な 方 を 使 用 します。 こ の 機 能 は 値 がアセンブ リ 時 変 数 であ る 場 合<br />
に 便 利 です。<br />
使 用 できない 定 数 を 使 用 して 命 令 を 記 述 した 場 合 、 アセンブラは "" というエ<br />
ラーを 通 知 します。 Immediate n out of range for this operation.<br />
<strong>ARM</strong> 状 態 の 即 値<br />
<strong>ARM</strong> 状 態 での MOV 命 令 と MVN 命 令 を 使 用 し た ロー ド について 以 下 に 示 し<br />
ます。<br />
• MOV 命 令 は、 0x0 ~ 0xFF (0 ~ 255) の 範 囲 内 にあ る 任 意 の 8 ビット 定 数 値<br />
をロードできます。<br />
こ れ ら の 値 は 任 意 の 偶 数 ビ ッ ト 分 ロ テー ト する こ と も で き ます。<br />
多 く のデータ 処 理 命 令 では、 これらの 値 を 別 の 命 令 でロードせずに、 イ<br />
ミ デ ィ エー ト オペラ ン ド と し て 使 用 する こ と も で き ます。<br />
• MVN 命 令 は、 これらの 値 のビ ッ ト 単 位 の 補 数 を ロード でき ます。 その 数 値<br />
は -(n+1) です。 n は MOV で 使 用 でき る 値 です。<br />
• <strong>ARM</strong>v6T2 以 上 のアーキテ ク チ ャ では、 MOV は 0x0-0xFFFF (0 ~ 65535) 範<br />
囲 内 にあ る 任 意 の 16 ビ ッ ト の 数 値 を ロー ド で き ます。<br />
表 2-5 (ページ 2-29) は、 <strong>ARM</strong> 状 態 で 提 供 さ れる (データ 処 理 命 令 に 使 用 で<br />
きる) 8 ビット 値 の 範 囲 を 示 しています。<br />
表 2-6 (ページ 2-29) は、 <strong>ARM</strong> 状 態 で 提 供 さ れる (MOV 命 令 にのみ 使 用 で き<br />
る) 16 ビ ッ ト 値 の 範 囲 を 示 しています。<br />
2-28 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
表 2-5 <strong>ARM</strong> 状 態 のイ ミ デ ィ エー ト 定 数 (8 ビット)<br />
バイナリ<br />
10 進 数<br />
ス<br />
テッ<br />
プ<br />
16 進 数 MVN の 値 a<br />
注 釈<br />
000000000000000000000000abcdefgh 0 ~ 255 1 0-0xFF –1 ~ –256 -<br />
0000000000000000000000abcdefgh00 0 ~ 1020 4 0-0x3FC –4 ~ –1024 -<br />
00000000000000000000abcdefgh0000 0 ~ 4080 16 0-0xFF0 –16 ~ –4096 -<br />
000000000000000000abcdefgh000000 0 ~ 16320 64 0-0x3FC0 –64 ~<br />
–16384<br />
-<br />
... ... ... ... -<br />
abcdefgh000000000000000000000000<br />
0 ~ 255 x 2 24 0-0xFF000000 1 ~ 256 x -<br />
2 24 -2 24<br />
cdefgh000000000000000000000000ab<br />
(ビ ッ ト パ<br />
ターン)<br />
- - (ビッ ト パ<br />
ターン)<br />
「 注 釈 」 の b<br />
を 参 照<br />
efgh000000000000000000000000abcd<br />
(ビ ッ ト パ<br />
ターン)<br />
- - (ビッ ト パ<br />
ターン)<br />
「 注 釈 」 の b<br />
を 参 照<br />
gh000000000000000000000000abcdef<br />
(ビ ッ ト パ<br />
ターン)<br />
- - (ビッ ト パ<br />
ターン)<br />
「 注 釈 」 の b<br />
を 参 照<br />
表 2-6 MOV 命 令 に 使 用 で き る <strong>ARM</strong> 状 態 のイ ミ デ ィ エー ト 定 数<br />
バイナリ<br />
10 進 数<br />
ス<br />
テッ<br />
プ<br />
16 進 数 MVN の 値 注 釈<br />
0000000000000000abcdefghijklmnop 0 ~ 65535 1 0-0xFFFF - 「 注 釈 」 の c<br />
を 参 照<br />
注 釈<br />
以 下 は、 表 2-5 と 表 2-6 に 関 する 追 加 説 明 です。<br />
a<br />
MVN の 値 は、 MVN 命 令 でオペラ ン ド と し て 直 接 使 用 する こ と し かで<br />
きません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-29<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
b<br />
c<br />
これらの 値 は、 <strong>ARM</strong> 状 態 でのみ 使 用 で き ます。 こ の 表 に 記 載 し<br />
た 他 の 値 はいずれも、 Thumb-2 でも 使 用 できます。<br />
これらの 値 は、 <strong>ARM</strong>v6T2 以 上 のアーキテ ク チ ャ でのみ 使 用 で き<br />
ます。 こ れら の 値 は、 他 の 命 令 ではオペラ ン ド と し て 直 接 使 用 す<br />
ることはできません。<br />
Thumb-2 イ ミディエート 定 数<br />
<strong>ARM</strong>v6T2 以 上 のアーキテ ク チ ャ の Thumb 状 態 での、 MOV 命 令 と MVN 命 令<br />
を 使 用 し た ロード について 以 下 に 示 し ます。<br />
• 32 ビットの MOV 命 令 では、 以 下 を ロー ド で き ます。<br />
— 0x0 ~ 0xFF (0 ~ 255) の 範 囲 内 にあ る 任 意 の 8 ビット 定 数 値<br />
— 任 意 のビ ッ ト 数 分 左 シ フ ト し た 任 意 の 8 ビット 定 数 値<br />
— レジスタのすべての 4 バ イ ト で 重 複 し てい る 任 意 の 8 ビットのビッ<br />
トパターン<br />
— バイ ト 1 と 3 がゼロに 設 定 されている と きに、バイ ト 0 と 2 で 重 複<br />
している 任 意 の 8 ビッ トのビットパターン<br />
— バイ ト 0 と 2 がゼロに 設 定 されている と きに、バイ ト 1 と 3 で 重 複<br />
している 任 意 の 8 ビッ トのビットパターン<br />
多 く のデータ 処 理 命 令 では、 これらの 値 を 別 の 命 令 でロードせずに、 イ<br />
ミ デ ィ エー ト オペラ ン ド と し て 使 用 する こ と も で き ます。<br />
• 32 ビットの MVN 命 令 は、 これらの 値 のビ ッ ト 単 位 の 補 数 を ロード でき ま<br />
す。 その 数 値 は -(n+1) です。 n は MOV で 使 用 でき る 値 です。<br />
• 32 ビットの MOV 命 令 は、 0x0-0xFFFF (0 ~ 65535) の 範 囲 内 にあ る 任 意 の<br />
16 ビ ッ ト の 数 値 を ロー ド で き ます。 こ れ ら の 値 は、 データ 処 理 命 令 で<br />
は イ ミ デ ィ エー ト オペラ ン ド と し て 使 用 する こ と はで き ません。<br />
表 2-7 (ページ 2-31) は、 <strong>ARM</strong>v6T2 以 上 のアーキテ ク チャ の Thumb 状 態 で<br />
提 供 さ れる (データ 処 理 命 令 に 使 用 で き る) 値 の 範 囲 を 示 し ています。<br />
表 2-8 (ページ 2-31) は、 <strong>ARM</strong>v6T2 以 上 のアーキテ ク チャ の Thumb 状 態 で<br />
提 供 さ れる (MOV 命 令 にのみ 使 用 で き る) 16 ビット 値 の 範 囲 を 示 しています。<br />
2-30 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
表 2-7 Thumb-2 即 値<br />
バイナリ<br />
10 進 数<br />
ス<br />
テッ<br />
プ<br />
16 進 数 MVN の 値 a<br />
注 釈<br />
000000000000000000000000abcdefgh 0 ~ 255 1 0-0xFF –1 ~ –256 -<br />
00000000000000000000000abcdefgh0 0 ~ 510 2 0-0x1FE –2 ~ –512 -<br />
0000000000000000000000abcdefgh00 0 ~ 1020 4 0-0x3FC –4 ~ –1024 -<br />
... ... ... ... -<br />
0abcdefgh00000000000000000000000<br />
abcdefgh000000000000000000000000<br />
0 ~ 255 x 2 23 0-0x7F800000 1 ~ 256 x 2 23 -<br />
2 23<br />
0 ~ 255 x 2 24 0-0xFF000000 1 ~ 256 x 2 24 -<br />
2 24<br />
abcdefghabcdefghabcdefghabcdefgh<br />
00000000abcdefgh00000000abcdefgh<br />
abcdefgh00000000abcdefgh00000000<br />
(ビ ッ ト パ<br />
ターン)<br />
(ビ ッ ト パ<br />
ターン)<br />
(ビ ッ ト パ<br />
ターン)<br />
- 0xXYXYXYXY 0xXYXYXYXY -<br />
- 0x00XY00XY 0xFFXYFFXY -<br />
- 0xXY00XY00 0xXYFFXYFF -<br />
00000000000000000000abcdefghijkl 0 ~ 4095 1 0-0xFFF - 「 注 釈 」<br />
(ページ<br />
2-32) の b を<br />
参 照<br />
表 2-8 MOV 命 令 に 使 用 でき る Thumb-2 状 態 の 即 値<br />
バイナリ<br />
10 進 数<br />
ス<br />
テッ<br />
プ<br />
16 進 数 MVN の 値 注 釈<br />
0000000000000000abcdefghijklmnop 0 ~ 65535 1 0-0xFFFF - 「 注 釈 」<br />
(ページ<br />
2-32) の c を<br />
参 照<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-31<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
注 釈<br />
以 下 は、 表 2-7 (ページ 2-31) と 表 2-8 (ページ 2-31) に 関 する 追 加 説 明 です。<br />
a<br />
b<br />
c<br />
MVN の 値 は、 MVN 命 令 でオペラ ン ド と し て 直 接 使 用 する こ と し かで<br />
きません。<br />
これらの 値 は、ADD、 SUB、 および MOV 命 令 では 直 接 オペ ラ ン ド と<br />
して 使 用 できますが、MVN や 他 のデータ 処 理 命 令 では 直 接 オペラ<br />
ンドとして 使 用 できません。<br />
これらの 値 は、MOV 命 令 でのみ 使 用 で き ます。<br />
2.5.2 MOV32 を 使 用 したロード<br />
<strong>ARM</strong>v6T2 以 降 では、 <strong>ARM</strong> 命 令 セ ッ ト と Thumb-2 命 令 セ ッ ト の 両 方 に、 以 下<br />
の 命 令 が 含 まれています。<br />
• 0x00000000 ~ 0x0000FFFF の 範 囲 内 にあ る 任 意 の 値 を レ ジ ス タ に ロー ド で<br />
きる MOV 命 令<br />
• レジス タの 下 位 半 分 の 内 容 を 変 更 する こ とな く、 0x0000 ~ 0xFFFF の 範 囲<br />
内 にあ る 任 意 の 値 を レ ジ ス タ の 上 位 半 分 に ロー ド で き る MOVT 命 令<br />
これら 2 つの 命 令 を 使 用 し て、 レジス タに 任 意 の 32 ビッ ト 定 数 を 構 成 できま<br />
す。 また、MOV32 疑 似 命 令 を 使 用 する こ と も で き ます。 アセンブラからは、 MOV<br />
命 令 と MOVT 命 令 のペアが 生 成 さ れます。 MOV32 疑 似 命 令 の 構 文 については、<br />
「MOV32 疑 似 命 令 」 (ページ 4-168) を 参 照 して 下 さい。<br />
2.5.3 LDR Rd, =const を 使 用 したロード<br />
LDR Rd,=const 疑 似 命 令 を 使 用 する と 、 1 つの 命 令 で 任 意 の 32 ビ ッ ト 数 値 定 数<br />
を 構 成 できます。 MOV 命 令 と MVN 命 令 の 範 囲 外 の 定 数 を 生 成 する には、 こ の 疑<br />
似 命 令 を 使 用 し ます。<br />
LDR 疑 似 命 令 は、 特 定 の 定 数 に 対 し て 最 も 効 率 的 な 命 令 を 生 成 し ます。<br />
• この 定 数 を 1 つの MOV 命 令 ま たは MVN 命 令 を 使 用 して 構 成 でき る 場 合 、<br />
アセンブラによってどちらか 適 切 な 命 令 が 生 成 されます。<br />
• この 定 数 を 1 つの MOV 命 令 ま たは MVN 命 令 を 使 用 して 構 成 できない 場 合 、<br />
アセンブラによって 以 下 の 処 理 が 行 われます。<br />
— リテラルプール (コー ド に 組 み 込 まれた、 定 数 値 を 保 持 する ため<br />
の メ モ リ の 一 部 ) に 値 を 配 置 する。<br />
2-32 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
— リ テ ラ ルプールか ら 定 数 を 読 み 出 す、 プ ロ グ ラ ム 相 対 ア ド レ ス を<br />
使 用 する LDR 命 令 を 生 成 する。<br />
以 下 に 例 を 示 し ます。<br />
LDR rn, [pc, #offset to literal pool]<br />
; load register n with one word<br />
; from the address [pc + offset]<br />
アセンブラが 生 成 した LDR 命 令 の 範 囲 内 に リ テ ラ ルプールがあ る こ と を<br />
確 認 する 必 要 があ り ます。 詳 細 については、 「リテラルプールの 配 置 」<br />
を 参 照 して 下 さい。<br />
LDR 疑 似 命 令 の 構 文 については、 「LDR 疑 似 命 令 」 (ページ 4-170) を 参 照 して<br />
下 さい。<br />
リ テ ラルプールの 配 置<br />
アセンブ ラ は、 各 セ ク シ ョ ンの 終 了 位 置 に リ テ ラ ルプールを 配 置 し ます。 各<br />
セ ク シ ョ ンの 終 了 位 置 は、 次 のセ ク シ ョ ンの 開 始 位 置 にあ る AREA ディレク<br />
ティブか、 アセンブリの 終 了 位 置 にある END ディレクティブによって 定 義 さ<br />
れます。 インクルードされたファイルの 最 後 にある END ディレクティブは、 セ<br />
ク シ ョ ンの 終 了 位 置 を 示 し てい るわけではあ り ません。<br />
大 きなセクシ ョ ンでは、デフォルト のリ テラルプールが 1 つ 以 上 の LDR 命 令 の<br />
範 囲 内 に 収 ま ら ない 可 能 性 があ り ます。 プログラムカウンタから 定 数 までの<br />
オフセ ッ ト は、 以 下 の 規 則 に 従 う 必 要 があ り ます。<br />
• <strong>ARM</strong> または Thumb-2 コー ド の 場 合 : 順 方 向 ま たは 逆 方 向 に 4KB 未 満<br />
• Thumb-2 以 前 の Thumb コード、 または Thumb-2 コードで 16 ビッ ト 命 令<br />
を 使 用 する 場 合 : 順 方 向 に 1KB 未 満<br />
LDR Rd,=const 疑 似 命 令 が 定 数 を リ テ ラ ルプールに 配 置 する よ う に 要 求 し てい<br />
る 場 合 、 アセンブ ラ は 以 下 を 行 います。<br />
• その 定 数 が 既 存 の リ テ ラルプール 内 に 存 在 し、 かつそ こから ア ド レ ス 指<br />
定 が 可 能 であ る かど う かをチェ ッ ク し ます。 可 能 であれば、 既 存 の 定 数<br />
でアド レス 指 定 します。<br />
• 定 数 が 既 存 の リ テ ラ ルプールに 存 在 し ない 場 合 は、 次 の リ テ ラ ルプール<br />
への 定 数 の 配 置 を 試 みます。<br />
次 の リ テ ラルプールが 範 囲 外 の 場 合 、 アセンブ ラ はエ ラー メ ッ セージを 生 成<br />
します。 こ の 場 合 は LTORG デ ィ レ ク テ ィ ブを 使 用 し て、 コード 内 に 別 の リ テ ラ<br />
ルプールを 配 置 する 必 要 があ り ます。 LTORG ディレクティブを 失 敗 した LDR 疑<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-33<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
似 命 令 の 後 、 かつ -4 ~ 4KB (<strong>ARM</strong>、 32 ビッ ト Thumb-2 の 場 合 ) ま たは 0 ~<br />
1KB (Thumb-2 以 前 の Thumb、 16 ビッ ト Thumb-2 の 場 合 ) の 範 囲 内 の 位 置 に<br />
配 置 し ます。 詳 細 については、 「LTORG」 (ページ 7-20) を 参 照 して 下 さい。<br />
リ テ ラルプールは、 プ ロ セ ッ サに よ って 命 令 と し て 実 行 さ れない 位 置 に 配 置<br />
する 必 要 があ り ます。 つま り 、 無 条 件 分 岐 命 令 の 後 ま たはサブルーチンの 最<br />
後 にあ る 復 帰 命 令 の 後 に 配 置 し て 下 さい。<br />
例 2-4 は こ れを 実 装 する コー ド を 示 し ています。 このサンプルは、 メ インサン<br />
プルデ ィ レ ク ト リ の install_directory\RVDS\Examples に loadcon.s という 名 前 で<br />
収 録 さ れています。 このサンプルをアセンブル、 リ ン ク、 および 実 行 する 方<br />
法 については、 「サンプルコー ド 」 (ページ 2-2) を 参 照 して 下 さい。<br />
コ メ ン ト と し て リ ス ト さ れてい る 命 令 は、 アセンブ ラ に よ っ て 生 成 さ れる<br />
<strong>ARM</strong> 命 令 です。<br />
例 2-4<br />
AREA Loadcon, CODE, READONLY<br />
ENTRY<br />
; Mark first instruction to execute<br />
start<br />
BL func1 ; Branch to first subroutine<br />
BL func2 ; Branch to second subroutine<br />
stop<br />
MOV r0, #0x18 ; angel_SWIreason_ReportException<br />
LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit<br />
SVC #0x123456 ; <strong>ARM</strong> semihosting (formerly SWI)<br />
func1<br />
LDR r0, =42 ; => MOV R0, #42<br />
LDR r1, =0x55555555 ; => LDR R1, [PC, #offset to<br />
; Literal Pool 1]<br />
LDR r2, =0xFFFFFFFF ; => MVN R2, #0<br />
BX lr<br />
LTORG<br />
; Literal Pool 1 contains<br />
; literal Ox55555555<br />
func2<br />
LDR r3, =0x55555555 ; => LDR R3, [PC, #offset to<br />
; Literal Pool 1]<br />
; LDR r4, =0x66666666 ; If this is uncommented it<br />
; fails, because Literal Pool 2<br />
; is out of reach<br />
BX lr<br />
LargeTable<br />
SPACE 4200 ; Starting at the current location,<br />
2-34 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
END<br />
; clears a 4200 byte area of memory<br />
; to zero<br />
; Literal Pool 2 is empty<br />
2.5.4 浮 動 小 数 点 定 数 のロー ド<br />
NEON 命 令 セ ッ ト および VFPv3 命 令 セ ッ ト には、 範 囲 の 制 限 さ れた 浮 動 小 数<br />
点 定 数 を イ ミ デ ィ エー ト 定 数 と し て ロー ド する 命 令 があ り ます。 詳 細 につい<br />
ては、 以 下 を 参 照 して 下 さい。<br />
• NEON 命 令 の 詳 細 については、 「VMOV、 VMVN (イ ミディエート)」<br />
(ページ 5-49) を 参 照 して 下 さい。<br />
• VFPv3 命 令 の 詳 細 については、 「VMOV」 (ページ 5-122) を 参 照 し て 下<br />
さい。<br />
VLDR 疑 似 命 令 を 使 用 する と 、 単 精 度 ま たは 倍 精 度 の 浮 動 小 数 点 定 数 を リ テ ラ<br />
ルプールから 1 つの 命 令 でロードできます。<br />
詳 細 については、 「VLDR 疑 似 命 令 」 (ページ 5-96) を 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-35<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
2.6 レジスタへのアドレスのロード<br />
レジスタにアドレスをロード しなければならない 場 合 がよ くあり ます。 例 え<br />
ば、 変 数 、 文 字 列 定 数 、 ま たはジ ャ ンプテーブルの 開 始 位 置 のア ド レ ス を<br />
ロードする 必 要 のある 場 合 があ り ます。<br />
一 般 的 に、 ア ド レ スは、 現 在 のプロ グ ラ ムカ ウ ン タ または 他 のレジス タから<br />
のオフセッ ト で 表 現 し ます。<br />
このセクションでは、 アドレスをレジスタにロードする 以 下 の 2 つの 方 法 に<br />
ついて 説 明 し ます。<br />
• レ ジ ス タへの 直 接 ロー ド (「「ADR と ADRL を 使 用 した 直 接 ロード」」 を<br />
参 照 )<br />
• リテラルプールからのアドレスのロード (「LDR Rd, =label を 使 用 したア<br />
ドレスのロード」 (ページ 2-40) を 参 照 )<br />
2.6.1 ADR と ADRL を 使 用 した 直 接 ロード<br />
ADR 命 令 と ADRL 疑 似 命 令 を 使 用 する と 、 データ ロー ド 命 令 を 使 用 し な く て も<br />
特 定 の 範 囲 内 のア ド レ ス を 生 成 する こ と がで き ます。 ADR 命 令 と ADRL 命 令 で<br />
は、 プ ロ グ ラ ム 相 対 式 を 使 用 で き ます。 プ ロ グ ラ ム 相 対 式 と は、 任 意 のオフ<br />
セッ トに 付 けるラベルで、 このラベルのアドレスが 現 在 のプログラムカウン<br />
タの 相 対 アドレスとなり ます。<br />
注<br />
ADR 命 令 ま たは ADRL 命 令 で 使 用 する ラベルは、 同 じ コー ド セ ク シ ョ ン 内 に 存<br />
在 している 必 要 があ り ます。 同 じコードセクシ ョ ン 内 にないラベルを 参 照 す<br />
ると、 アセンブラによりエラーが 返 されます。<br />
Thumb 状 態 では、 16 ビッ トの ADR 命 令 で 生 成 でき るのはワード 境 界 で 整 列 さ<br />
せたア ド レ スのみです。<br />
Thumb-2 以 前 のプ ロ セ ッ サでは、 Thumb 状 態 で ADRL 命 令 を 使 用 する こ と はで<br />
きません。<br />
ADR<br />
利 用 できる 範 囲 は、 使 用 する 命 令 セッ ト によって 異 な り ます。<br />
<strong>ARM</strong><br />
バイ ト またはハーフワード 境 界 で 整 列 されているアドレス<br />
から 255 バイ トの 範 囲<br />
2-36 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
ワード 境 界 で 整 列 されているアド レスから 1020 バイ トの<br />
範 囲<br />
32 ビッ トの Thumb-2<br />
バイ ト、 ハーフワード、 またはワード 境 界 で 整 列 されてい<br />
るアドレスから 4095 バイ トの 範 囲<br />
16 ビッ トの Thumb<br />
0 ~ 1020 バイ ト。 label はワー ド 境 界 で 整 列 させる 必 要 が<br />
あります ALIGN ディレクティブを 使 用 して、 label をワード<br />
境 界 で 整 列 さ せる こ と がで き ます。<br />
詳 細 については、 「ADR」 (ページ 4-24) を 参 照 して 下 さい。<br />
ADRL<br />
アセンブラは、 以 下 を 生 成 する こ とによ り、ADRL rn,label 疑 似 命 令 を 変 換 し ま<br />
す。<br />
• アド レスが 範 囲 内 にある 場 合 は、 そのアド レスをロードする 2 つのデー<br />
タ 処 理 命 令 を 生 成 し ます。<br />
• 2 つの 命 令 でア ド レ ス を 構 成 で き ない 場 合 は、 エ ラー メ ッ セージを 生 成<br />
します。<br />
利 用 で き る 範 囲 は、 使 用 する 命 令 セ ッ ト に よ って 異 な り ます。<br />
<strong>ARM</strong><br />
バイ ト 境 界 またはハーフワード 境 界 で 整 列 されているアド<br />
レスから 64KB の 範 囲<br />
ワード 境 界 で 整 列 されているアド レスから 256KB の 範 囲<br />
32 ビッ トの Thumb-2<br />
バイ ト、 ハーフワード、 またはワード 境 界 で 整 列 されてい<br />
るアドレスから 1MB の 範 囲<br />
16 ビッ トの Thumb<br />
ADRL 命 令 は 使 用 で き ません。<br />
ADRL 疑 似 命 令 の 範 囲 外 にあ る ア ド レ スの ロー ド については、 「LDR Rd, =label<br />
を 使 用 したア ド レスのロード」 (ページ 2-40) を 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-37<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
ADR を 使 用 し たジ ャ ンプテーブルの 実 装<br />
例 2-5 は、 ジ ャ ンプテーブルを 実 装 する <strong>ARM</strong> コードを 示 しています。 ADR 命<br />
令 では、 ジ ャ ンプテーブルのア ド レ ス を ロード し ます。 このコードは、 メイ<br />
ンサンプルディ レク ト リ の install_directory\RVDS\Examples に jump.s という 名<br />
前 で 収 録 されています。 こ のサンプルをアセンブル、 リ ン ク、 および 実 行 す<br />
る 方 法 については、 「サンプルコー ド」 (ページ 2-2) を 参 照 して 下 さい。<br />
例 2-5 <strong>ARM</strong> コー ド によ るジ ャ ンプテーブルの 実 装<br />
AREA Jump, CODE, READONLY ; Name this block of code<br />
<strong>ARM</strong><br />
; Following code is <strong>ARM</strong> code<br />
num EQU 2 ; Number of entries in jump table<br />
ENTRY<br />
; Mark first instruction to execute<br />
start<br />
; First instruction to call<br />
MOV r0, #0 ; Set up the three parameters<br />
MOV r1, #3<br />
MOV r2, #2<br />
BL arithfunc ; Call the function<br />
stop<br />
MOV r0, #0x18 ; angel_SWIreason_ReportException<br />
LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit<br />
SVC #0x123456 ; <strong>ARM</strong> semihosting (formerly SWI)<br />
arithfunc<br />
; Label the function<br />
CMP r0, #num ; Treat function code as unsigned<br />
integer<br />
BXHS lr ; If code is >= num then simply return<br />
ADR r3, JumpTable ; Load address of jump table<br />
LDR pc, [r3,r0,LSL#2] ; Jump to the appropriate routine<br />
JumpTable<br />
DCD DoAdd<br />
DCD DoSub<br />
DoAdd<br />
ADD r0, r1, r2 ; Operation 0<br />
BX lr ; Return<br />
DoSub<br />
SUB r0, r1, r2 ; Operation 1<br />
BX lr ; Return<br />
END<br />
; Mark the end of this file<br />
例 2-5 では、 関 数 arithfunc が 3 つの 引 数 を 取 り 、r0 に 結 果 を 返 し ます。 最 初 の<br />
引 数 に よ って、 2 番 目 と 3 番 目 の 引 数 に 対 し て 実 行 さ れる 演 算 が 決 ま り ます。<br />
引 数 1 = 0 結 果 = 引 数 2 + 引 数 3<br />
2-38 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
引 数 1 = 1 結 果 = 引 数 2 – 引 数 3<br />
ジャンプテーブルは、 以 下 の 命 令 とアセンブラディ レクティブを 使 用 して 実<br />
装 されます。<br />
EQU<br />
アセンブラディ レクティブです。 このディレクティブを 使 用 して<br />
シンボルに 値 を 指 定 します。 例 2-5 (ページ 2-38) では、num に 値<br />
2 を 割 り 当 てます。 コード 内 で num を 使 用 する と 、 値 2 に 置 き 換<br />
えられます。 EQU の こ の よ う な 使 用 法 は、 C 言 語 で #define を 使 用<br />
し て 定 数 を 定 義 する 方 法 と 似 ています。<br />
DCD ストアする 1 つ 以 上 のワー ド を 宣 言 し ます。 例 2-5 (ページ 2-38)<br />
では、 各 DCD が、 ジ ャ ンプテーブルの 特 定 の 節 を 処 理 するルーチ<br />
ンのアド レスをス ト アします。<br />
LDR<br />
LDR pc,[r3,r0,LSL#2] 命 令 は、 ジ ャ ンプテーブルか ら 必 要 な 節 のア<br />
ドレスをプログラムカウンタにロードします。 この 命 令 は 以 下 を<br />
実 行 し ます。<br />
• r0 が 保 持 する 節 の 数 を 4 で 乗 算 し てワード オフセ ッ ト を 求<br />
める。<br />
• 結 果 をジ ャ ンプテーブルのア ド レ スに 加 算 する。<br />
• 加 算 し たア ド レ スの 内 容 をプ ロ グ ラ ムカ ウ ン タ に ロー ド す<br />
る。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-39<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
2.6.2 LDR Rd, =label を 使 用 したア ド レスのロード<br />
LDR Rd,= 疑 似 命 令 を 使 用 する こ と に よ り 、 どの よ う な 32 ビ ッ ト 数 値 定 数 で も<br />
レジスタにロードできます (「LDR Rd, =const を 使 用 したロード」 (ページ<br />
2-32) を 参 照 )。 また、 この 命 令 には、 ラベルやオフセッ ト 付 きラベルなどの<br />
プログラム 相 対 式 も 使 用 できます。 構 文 の 詳 細 については、 「LDR 疑 似 命 令 」<br />
(ページ 4-170) を 参 照 して 下 さい。<br />
アセンブラは、 以 下 を 行 う こ とによ り LDR r0, =label 疑 似 命 令 を 変 換 し ます。<br />
• label のア ド レ ス を リ テ ラ ルプール (コー ド に 組 み 込 まれた、 定 数 値 を<br />
保 持 する ための メ モ リ の 一 部 ) に 配 置 する。<br />
• リ テ ラルプールか ら ア ド レ ス を 読 み 出 すプ ロ グ ラ ム 相 対 LDR 命 令 を 生 成<br />
する。 以 下 に 例 を 示 します。<br />
LDR rn [pc, #offset to literal pool]<br />
; load register n with one word<br />
; from the address [pc + offset]<br />
リ テ ラルプールが 範 囲 内 にあ る こ と を 確 認 する 必 要 があ り ます。 詳 細 に<br />
ついては、 「リテラルプールの 配 置 」 (ページ 2-33) を 参 照 して 下 さい。<br />
ADR 疑 似 命 令 や ADRL 疑 似 命 令 と は 異 な り 、 LDR 命 令 は 現 在 のセ ク シ ョ ンに 含 ま<br />
れないラベルに 使 用 でき ます。 ラベルが 現 在 のセ ク シ ョ ンの 範 囲 外 にあ る 場<br />
合 には、 アセンブラがソースファ イルのアセンブ リ 時 に 再 配 置 ディ レクテ ィ<br />
ブをオブジェ ク ト コード 内 に 配 置 します。 こ の 再 配 置 デ ィ レ ク テ ィ ブは、 リ<br />
ン ク 時 にア ド レ ス を 解 決 する よ う に リ ンカに 指 示 し ます。 このアドレスは、<br />
リンカが LDR とリテラルプールを 含 むセクションをどこに 配 置 しても 有 効 で<br />
す。<br />
例 2-6 は こ れを 実 装 する コー ド を 示 し ています。 このサンプルは、 メ インサン<br />
プルデ ィ レ ク ト リ の install_directory\RVDS\Examples に ldrlabel.s という 名 前 で<br />
収 録 さ れています。 このサンプルをアセンブル、 リ ン ク、 および 実 行 する 方<br />
法 については、 「サンプルコー ド 」 (ページ 2-2) を 参 照 して 下 さい。<br />
コ メン ト と して 記 載 されている 命 令 は、アセンブラによって 生 成 される <strong>ARM</strong><br />
命 令 です。<br />
例 2-6<br />
start<br />
AREA LDRlabel, CODE,READONLY<br />
ENTRY<br />
; Mark first instruction to execute<br />
BL func1 ; Branch to first subroutine<br />
2-40 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
BL func2 ; Branch to second subroutine<br />
stop<br />
MOV r0, #0x18 ; angel_SWIreason_ReportException<br />
LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit<br />
SVC #0x123456 ; <strong>ARM</strong> semihosting (formerly SWI)<br />
func1<br />
LDR r0, =start ; => LDR R0,[PC, #offset into<br />
; Literal Pool 1]<br />
LDR r1, =Darea + 12 ; => LDR R1,[PC, #offset into<br />
; Literal Pool 1]<br />
LDR r2, =Darea + 6000 ; => LDR R2, [PC, #offset into<br />
; Literal Pool 1]<br />
BX lr ; Return<br />
LTORG ; Literal Pool 1<br />
func2<br />
LDR r3, =Darea + 6000 ; => LDR r3, [PC, #offset into<br />
; Literal Pool 1]<br />
; (sharing with previous literal)<br />
; LDR r4, =Darea + 6004 ; If uncommented produces an error<br />
; as Literal Pool 2 is out of range<br />
BX lr ; Return<br />
Darea SPACE 8000 ; Starting at the current location,<br />
; clears a 8000 byte area of memory<br />
; to zero<br />
END<br />
; Literal Pool 2 is out of range of<br />
; the LDR instructions above<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-41<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
LDR Rd, =label の 使 用 例 : 文 字 列 のコ ピー<br />
例 2-7 は、 あ る 1 つの 文 字 列 を 別 の 文 字 列 で 上 書 きする <strong>ARM</strong> コードルーチン<br />
を 示 しています。 こ こでは、LDR 疑 似 命 令 を 使 用 し てデータ セ ク シ ョ ンか ら 2<br />
つの 文 字 列 のア ド レ ス を ロード し ます。 以 下 は 特 に 重 要 です。<br />
DCB<br />
LDR, STR<br />
DCB ディレクティブは、 ス トアする 1 バイ ト 以 上 の 値 を 定 義 し ま<br />
す。 DCB には 整 数 値 だけでな く 、 引 用 符 で 囲 んだ 文 字 列 も 使 用 で<br />
きます。 文 字 列 の 各 文 字 は、 連 続 し たバ イ ト に 配 置 さ れます。 詳<br />
細 については、 「DCB」 (ページ 7-26) を 参 照 して 下 さい。<br />
LDR 命 令 と STR 命 令 は、 ポ ス ト イ ンデ ク ス ア ド レ シングを 使 用 し<br />
て、 ア ド レ ス レジス タ を 更 新 し ます。 例 えば、 以 下 の 命 令<br />
LDRB<br />
r2,[r1],#1<br />
は、 r1 が 指 すア ド レ スの 内 容 を r2 にロード し、r1 を 1 ずつイ ン<br />
クリメントします。<br />
例 2-7 文 字 列 のコ ピー<br />
AREA StrCopy, CODE, READONLY<br />
ENTRY<br />
; Mark first instruction to execute<br />
start<br />
LDR r1, =srcstr ; Pointer to first string<br />
LDR r0, =dststr ; Pointer to second string<br />
BL strcopy ; Call subroutine to do copy<br />
stop<br />
MOV r0, #0x18 ; angel_SWIreason_ReportException<br />
LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit<br />
SVC #0x123456 ; <strong>ARM</strong> semihosting (formerly SWI)<br />
strcopy<br />
LDRB r2, [r1],#1 ; Load byte and update address<br />
STRB r2, [r0],#1 ; Store byte and update address<br />
CMP r2, #0 ; Check for zero terminator<br />
BNE strcopy ; Keep going if not<br />
MOV pc,lr ; Return<br />
AREA Strings, DATA, READWRITE<br />
srcstr DCB "First string - source",0<br />
dststr DCB "Second string - destination",0<br />
END<br />
2-42 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
2.7 多 重 レ ジス タ ロー ド / ストア 命 令<br />
<strong>ARM</strong>、 Thumb-2、 および Thumb-2 以 前 の Thumb の 命 令 セ ッ ト には、 メ モ リ と<br />
の 間 で 複 数 レ ジ ス タ の ロー ド と ス ト ア を 実 行 する 命 令 があ り ます。<br />
多 重 レ ジ ス タ 転 送 命 令 を 使 用 する と 、 複 数 レ ジ ス タ の 内 容 を メ モ リ と の 間 で<br />
効 率 的 に 移 動 で き ます。 これら の 命 令 は、 サブルーチンのエン ト リ と 終 了 時<br />
におけ る ブ ロ ッ ク コ ピーやス タ ッ ク 操 作 に よ く 使 用 さ れます。 複 数 の 単 一<br />
データ 転 送 命 令 の 代 わ り に 多 重 レ ジ ス タ 転 送 命 令 を 使 用 する と 、 以 下 の よ う<br />
な 利 点 があ り ます。<br />
• コードサイズが 小 さ くなる。<br />
• 何 度 も 命 令 フ ェ ッ チする のではな く 1 回 の 命 令 フ ェ ッチで 済 むため、<br />
オーバヘッ ド が 小 さい。<br />
• キャッシュなし <strong>ARM</strong> プロセッサでは、 多 重 ロード / ストア 命 令 によっ<br />
て 転 送 さ れるデータ の 先 頭 ワー ド は 必 ず 非 シーケ ンシ ャル メ モ リ サ イ ク<br />
ルで 処 理 さ れるが、 その 後 に 転 送 さ れるすべての ワー ド はシーケ ンシ ャ<br />
ルサ イ ク ルで 処 理 する こ と が 可 能 。 ほとんどのシステムでは、 シーケン<br />
シ ャル メ モ リ サ イ ク ルの 方 が 実 行 速 度 が 速 く な り ます。<br />
注<br />
最 も 小 さな 番 号 のレジスタがアクセス 先 の 最 下 位 アドレスとの 間 で 転 送 され、<br />
最 も 大 き な 番 号 のレ ジ ス タ がア ク セス 先 の 最 上 位 ア ド レ ス と の 間 で 転 送 さ れ<br />
ます。 命 令 のレジスタ リ ス ト 内 でのレジスタの 順 序 は 関 係 あ り ません。<br />
レ ジ ス タ リ ス ト 内 のレ ジ ス タ が 昇 順 に 指 定 さ れてい る こ と を 確 認 する に<br />
は、--diag_warning 1206 アセンブ ラ コ マン ド ラ イ ンオプシ ョ ン を 使 用 し ます。<br />
このセ ク シ ョ ンでは、 以 下 の 内 容 について 説 明 し ます。<br />
• 「<strong>ARM</strong> と Thumb で 利 用 で き る 多 重 ロー ド / ストア 命 令 」 (ページ 2-44)<br />
• 「LDM と STM によるスタッ クの 実 装 」 (ページ 2-45)<br />
• 「LDM および STM によるブロックコピー」 (ページ 2-48)<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-43<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
2.7.1 <strong>ARM</strong> と Thumb で 利 用 できる 多 重 ロード / ストア 命 令<br />
<strong>ARM</strong> 命 令 セ ッ ト と Thumb 命 令 セ ッ ト では、 以 下 の 命 令 が 利 用 で き ます。<br />
LDM<br />
STM<br />
PUSH<br />
POP<br />
複 数 のレ ジ ス タ を ロー ド する。<br />
複 数 のレ ジ ス タ を ス ト アする。<br />
複 数 のレジスタをスタ ッ クにス ト アして、 スタ ッ クポインタを<br />
更 新 する。<br />
複 数 のレジスタをスタックからロードして、 スタックポインタ<br />
を 更 新 する。<br />
LDM 命 令 と STM 命 令 を 使 用 し て 以 下 を 行 え ます。<br />
• ロード またはス ト アするレジスタのリ ス ト には 以 下 を 含 めるこ とができ<br />
ます。<br />
— <strong>ARM</strong> 命 令 では、 任 意 ま たはすべての r0 ~ r15 を 含 める こ とができ<br />
ます。<br />
— 32 ビットの Thumb-2 命 令 では、 任 意 ま たはすべての r0 ~ r12 を 含<br />
めるこ とができます。 また、 制 限 はあり ますが、 オプショ ンで r14<br />
または r15 を 含 める こ とができます。<br />
— 16 ビットの Thumb 命 令 と Thumb-2 命 令 では、 任 意 ま たはすべての<br />
r0 ~ r7 を 含 める こ とができます。<br />
• ア ド レ スは、 以 下 の よ う に 操 作 で き ます。<br />
— 転 送 単 位 でポ ス ト イ ン ク リ メ ン ト<br />
— 転 送 単 位 でプレ イ ン ク リ メ ン ト (<strong>ARM</strong> 命 令 のみ)<br />
— 転 送 単 位 でポ ス ト デ ク リ メ ン ト (<strong>ARM</strong> 命 令 のみ)<br />
— 転 送 単 位 でプレデ ク リ メ ン ト (16 ビッ トの Thumb ではサポー ト さ<br />
れません)<br />
• ベース レ ジ ス タ に 対 し ては 以 下 のいずれかの 操 作 を 実 行 で き ます。<br />
— メ モ リ 内 の 次 のブ ロ ッ ク を 指 すよ う に 更 新 する。<br />
— 命 令 前 の 状 態 を 維 持 する。<br />
メ モ リ 内 の 次 のブロ ッ ク を 指 すよ う にベース レジス タ を 更 新 する こ と は、 ラ<br />
イトバックと 呼 ばれます。つまり、 調 整 されたアドレスがベースレジスタに<br />
書 き 込 まれます。<br />
PUSH 命 令 と POP 命 令 を 使 用 し て 以 下 を 行 え ます。<br />
• スタックポインタ (sp) がベース レ ジ ス タ と し て 使 用 さ れ、 常 に 更 新 さ<br />
れます。<br />
2-44 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
• POP 命 令 では、 ア ド レ スは 転 送 単 位 でポ ス ト イ ン ク リ メ ン ト さ れます。<br />
また、PUSH 命 令 では、 ア ド レ スは 転 送 単 位 でプレデ ク リ メ ン ト さ れま<br />
す。<br />
• ロード またはス ト アするレジス タの リ ス ト には 以 下 を 含 める こ とができ<br />
ます。<br />
— <strong>ARM</strong> 命 令 では、 任 意 ま たはすべての r0 ~ r15 を 含 める こ とができ<br />
ます。<br />
— 32 ビットの Thumb-2 命 令 では、 任 意 ま たはすべての r0 ~ r12 を 含<br />
めるこ とができます。 また、 制 限 はあり ますが、 オプショ ンで r14<br />
または r15 を 含 める こ とができます。<br />
— 16 ビットの Thumb-2 命 令 と Thumb 命 令 では、 任 意 ま たはすべての<br />
r7 ~ r15 を 含 め る こ と がで き ます。 ま た、 オプシ ョ ンで r14 (PUSH<br />
命 令 の 場 合 のみ) ま たは r15 (POP 命 令 の 場 合 のみ) を 含 め る こ と<br />
ができ ます。<br />
2.7.2 LDM と STM によ るス タ ッ クの 実 装<br />
多 重 ロー ド / ストア 命 令 によって、 ベースレジスタを 更 新 できます。 通 常 、 ス<br />
タック 操 作 では、ベースレジスタにはスタックポインタ sp が 使 用 されます。<br />
つま り 、 こ れ ら の 命 令 を 使 用 する と 、 1 つの 命 令 で 任 意 の 数 のレジス タに 対<br />
し てプ ッ シ ュ 操 作 と ポ ッ プ 操 作 を 実 装 する こ と がで き ます。<br />
多 重 ロー ド / ストア 命 令 は、 以 下 のタイプのスタックに 使 用 できます。<br />
下 降 ま たは 上 昇<br />
ス タ ッ クには、 上 位 ア ド レスから 下 位 ア ド レスに 下 に 向 かって<br />
展 開 さ れる 下 降 スタックと、 下 位 アドレスから 上 位 アドレスに<br />
向 かって 展 開 される 上 昇 スタックがあります。<br />
フルまたは 空<br />
スタックポインタは、 スタック 内 の 最 後 の 項 目 (フルスタック)<br />
またはスタッ クの 次 の 空 き 領 域 ( 空 スタック) のどちらかを 指<br />
すこ とができます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-45<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
プレ / ポス ト インク リ メン トやプレ / ポ ス ト デ ク リ メ ン ト 接 尾 文 字 を 使 用 する<br />
代 わ り に、 ス タ ッ ク 指 向 の 接 尾 文 字 を 使 用 する こ と で、 プ ロ グ ラ ミ ングが さ<br />
ら に 容 易 にな り ます。 表 2-9 にロード / ス ト ア 命 令 のス タ ッ ク 指 向 接 尾 文 字 お<br />
よびそれら と 同 等 のア ド レ ッ シングモー ド 接 尾 文 字 を 示 し ます。<br />
表 2-9 ス タ ッ ク 指 向 接 尾 文 字 および 同 等 のア ド レ ッ シングモー ド 接 尾 文 字<br />
ス タ ッ ク 指 向 接 尾 文 字<br />
FD ( 完 全 降 順 ス タ ッ ク )<br />
FA ( 完 全 昇 順 ス タ ッ ク )<br />
ED ( 空 き 降 順 ス タ ッ ク )<br />
EA ( 空 き 昇 順 ス タ ッ ク )<br />
ストアまたはプッシュ<br />
命 令<br />
DB (プレデク リ メ ン<br />
ト)<br />
IB (プレ イ ン ク リ メ ン<br />
ト)<br />
DA (ポス ト デク リ メ ン<br />
ト)<br />
IA (ポス ト イ ン ク リ メ<br />
ント)<br />
ロードまたはポップ 命<br />
令<br />
IA (ポス ト イ ン ク リ メ<br />
ント)<br />
DA (ポス ト デク リ メ ン<br />
ト)<br />
IB (プレ イ ン ク リ メ ン<br />
ト)<br />
DB (プレデク リ メ ン<br />
ト)<br />
表 2-10 に 各 種 ス タ ッ ク タ イ プに 対 する ス タ ッ ク 指 向 接 尾 文 字 が 付 いた 多 重<br />
ロード / ストア 命 令 を 示 します。<br />
表 2-10 多 重 ロー ド / ス ト ア 命 令 の 接 尾 文 字<br />
スタックのタイ<br />
プ<br />
フル 下 降<br />
フル 上 昇<br />
空 下 降<br />
空 上 昇<br />
ストア<br />
STMFD (STMDB、 プレデクリメ<br />
ント)<br />
STMFA (STMIB、 プレインクリ<br />
メント)<br />
STMED (STMDA、 ポストデクリ<br />
メント)<br />
STMEA (STM、 ポストインクリ<br />
メント)<br />
ロード<br />
LDMFD (LDM、 ポストインクリ<br />
メント)<br />
LDMFA (LDMDA、 ポストデクリ<br />
メント)<br />
LDMED (LDMIB、 プレインクリ<br />
メント)<br />
LDMEA (LDMDB、 プレデクリメ<br />
ント)<br />
例 :<br />
STMFD<br />
LDMFD<br />
sp!, {r0-r5} ; Push onto a Full Descending Stack<br />
sp!, {r0-r5} ; Pop from a Full Descending Stack<br />
2-46 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
注<br />
<strong>ARM</strong> アーキテクチャ 向 けプロシージャ コール 標 準 (AAPCS)、 および <strong>ARM</strong><br />
と Thumb の C/C++ コンパイラでは、 常 にフル 下 降 スタックを 使 用 します。<br />
PUSH 命 令 と POP 命 令 では、 フル 下 降 ス タ ッ ク が 使 用 さ れる こ と が 想 定 さ れま<br />
す。 これらは、 ライ トバッ クを 使 用 する STMDB 命 令 と LDM に 適 し た 同 義 語 です。<br />
ネス ト されたサブルーチンのレジスタのスタ ッ ク<br />
ス タ ッ ク 操 作 は、 サブルーチンのエン ト リ と 終 了 時 で 行 う と 効 果 的 です。 サ<br />
ブルーチンのエン ト リ で 必 要 なすべての 作 業 レ ジ ス タ を ス タ ッ ク にス ト ア し、<br />
終 了 時 にス タ ッ ク か ら ポ ッ プする こ と がで き ます。<br />
また、 サブルーチンのエン ト リでリ ンクレジスタをスタッ クにプッシュして<br />
おけば、 復 帰 ア ド レスを 失 わずに 別 のサブルーチンコールを 安 全 に 実 行 でき<br />
ます。 この 場 合 は、 lr をポップして、 その 値 を pc に 移 動 する 代 わ り に、 サブ<br />
ルーチンの 終 了 時 にス タ ッ ク か ら pc をポップするこ とによってサブルーチン<br />
から 戻 るこ とができます。 例 :<br />
subroutine PUSH<br />
; code<br />
BL<br />
; code<br />
POP<br />
{r5-r7,lr} ; Push work registers and lr<br />
somewhere_else<br />
{r5-r7,pc} ; Pop work registers and pc<br />
注<br />
<strong>ARM</strong>/Thumb 混 合 シ ス テムで こ の 方 法 を 使 用 する 場 合 は 注 意 する 必 要 があ り<br />
ます。 <strong>ARM</strong>v4T システムでは、 プログラムカウンタを 直 接 ポップしても 状 態<br />
を 変 更 する こ とはできません。 このよ うな 場 合 は、 アドレスを 一 時 レジスタ<br />
にポップして、 BX 命 令 を 使 用 する 必 要 があ り ます。<br />
<strong>ARM</strong>v5T 以 上 では、 この 方 法 で 状 態 を 変 更 でき ます。<br />
<strong>ARM</strong> と Thumb の 混 合 の 詳 細 については、『デベロ ッパガイ ド』 の 第 5 章 <strong>ARM</strong><br />
と Thumb のインターワークを 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-47<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
2.7.3 LDM および STM によるブロッ クコピー<br />
例 2-8 は、 一 度 に 1 ワー ド ずつコ ピーする こ と に よ り 、 ソ ース 位 置 の 一 連 の<br />
ワー ド をデス テ ィ ネーシ ョ ンに コ ピーする <strong>ARM</strong> コードルーチンを 示 してい<br />
ます。 このサンプルは、 メ インサンプルディレク ト リの<br />
install_directory\RVDS\Examples に word.s という 名 前 で 収 録 されています。 この<br />
サンプルをアセンブル、 リ ン ク、 および 実 行 する 方 法 については、 「サンプル<br />
コード」 (ページ 2-2) を 参 照 して 下 さい。<br />
例 2-8 LDM および STM によるブロッ クコピー<br />
AREA Word, CODE, READONLY ; name this block of code<br />
num EQU 20 ; set number of words to be copied<br />
ENTRY<br />
; mark the first instruction called<br />
start<br />
LDR r0, =src ; r0 = pointer to source block<br />
LDR r1, =dst ; r1 = pointer to destination block<br />
MOV r2, #num ; r2 = number of words to copy<br />
wordcopy<br />
LDR r3, [r0], #4 ; load a word from the source and<br />
STR r3, [r1], #4 ; store it to the destination<br />
SUBS r2, r2, #1 ; decrement the counter<br />
BNE wordcopy ; ... copy more<br />
stop<br />
MOV r0, #0x18 ; angel_SWIreason_ReportException<br />
LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit<br />
SVC #0x123456 ; <strong>ARM</strong> semihosting (formerly SWI)<br />
AREA BlockData, DATA, READWRITE<br />
src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4<br />
dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0<br />
END<br />
このモジュールは、 できるだけ 多 くのコピーできる 部 分 に LDM 命 令 と STM 命 令<br />
を 使 用 する こ と で、 効 率 化 で き ます。 この <strong>ARM</strong> コードで 指 定 されているレジ<br />
ス タ の 数 か ら、 一 度 に 転 送 する ワー ド 数 は 8 ワードが 妥 当 です。 コピーするブ<br />
ロックに 8 ワード 単 位 のブロ ッ クがい くつあるかは、 以 下 を 使 用 して 検 出 で<br />
きます (r2 = コ ピーする ワー ド 数 の 場 合 )。<br />
MOVS r3, r2, LSR #3 ; number of eight word multiples<br />
この 値 を 使 用 して、 一 度 に 8 ワードずつコピーするループ 内 の 繰 り 返 しの 回<br />
数 を 制 御 できます。 残 りのワード 数 が 8 ワー ド に 満 たない 場 合 は、 以 下 を 使 用<br />
して 残 りのワード 数 を 検 出 できます (r2 が 破 損 していないこ と を 前 提 と した<br />
場 合 )。<br />
2-48 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
ANDS r2, r2, #7<br />
例 2-9 は、 LDM 命 令 と STM 命 令 を 使 用 し て コ ピーする よ う に 書 き 直 し たブ ロ ッ<br />
クコピーモジュールを 示 しています。<br />
例 2-9 LDM および STM によるブロッ クコピー<br />
AREA Block, CODE, READONLY ; name this block of code<br />
num EQU 20 ; set number of words to be copied<br />
ENTRY<br />
; mark the first instruction called<br />
start<br />
LDR r0, =src ; r0 = pointer to source block<br />
LDR r1, =dst ; r1 = pointer to destination block<br />
MOV r2, #num ; r2 = number of words to copy<br />
MOV sp, #0x400 ; Set up stack pointer (sp)<br />
blockcopy<br />
MOVS r3,r2, LSR #3 ; Number of eight word multiples<br />
BEQ copywords ; Less than eight words to move?<br />
PUSH {r4-r11} ; Save some working registers<br />
octcopy<br />
LDM r0!, {r4-r11} ; Load 8 words from the source<br />
STM r1!, {r4-r11} ; and put them at the destination<br />
SUBS r3, r3, #1 ; Decrement the counter<br />
BNE octcopy ; ... copy more<br />
POP {r4-r11} ; Don't need these now - restore<br />
; originals<br />
copywords<br />
ANDS r2, r2, #7 ; Number of odd words to copy<br />
BEQ stop ; No words left to copy?<br />
wordcopy<br />
LDR r3, [r0], #4 ; Load a word from the source and<br />
STR r3, [r1], #4 ; store it to the destination<br />
SUBS r2, r2, #1 ; Decrement the counter<br />
BNE wordcopy ; ... copy more<br />
stop<br />
MOV r0, #0x18 ; angel_SWIreason_ReportException<br />
LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit<br />
SVC #0x123456 ; <strong>ARM</strong> semihosting (formerly SWI)<br />
AREA BlockData, DATA, READWRITE<br />
src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4<br />
dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0<br />
END<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-49<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
2.8 マ ク ロの 使 用<br />
マクロ 定 義 は、MACRO ディレクティブと MEND ディレクティブの 間 にあるコード<br />
ブロッ クです。 これによってコードブロ ッ ク 全 体 を 繰 り 返 す 代 わ り に 使 用 で<br />
き る 名 前 が 定 義 さ れます。 マ ク ロ を 使 用 する 主 な 用 途 は 以 下 の と お り です。<br />
• コードブロ ッ クを 1 つの 分 か り やすい 名 前 に 置 き 換 え る こ と によ り 、<br />
ソースコードのロジッ クを 追 いやすくする。<br />
• コードブロ ッ クの 繰 り 返 しを 防 ぐ。<br />
詳 細 については、 「MACRO、 MEND」 (ページ 7-37) を 参 照 して 下 さい。<br />
このセクションでは、 以 下 の 内 容 について 説 明 します。<br />
• 「Test-and-Branch (テス ト - 分 岐 ) マ ク ロ のサンプル」 (ページ 2-51)<br />
• 「 符 号 な し 整 数 除 算 マ ク ロ のサンプル」 (ページ 2-51)<br />
2-50 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
2.8.1 Test-and-Branch (テス ト - 分 岐 ) マ ク ロのサンプル<br />
Thumb-2 以 前 のプ ロ セ ッ サで 実 行 する <strong>ARM</strong> コード と Thumb コードで、<br />
Test-and-Branch (テス ト - 分 岐 ) 操 作 を 行 う には 2 つの <strong>ARM</strong> 命 令 を 実 装 する<br />
必 要 があ り ます。<br />
以 下 の よ う なマ ク ロ を 定 義 で き ます。<br />
MACRO<br />
$label TestAndBranch $dest, $reg, $cc<br />
$label CMP $reg, #0<br />
B$cc $dest<br />
MEND<br />
MACRO ディレクティブの 後 の 行 はマクロプロ ト タイプステート メントです。 マ<br />
クロプロトタイプステート メントは、 マクロの 呼 び 出 しに 使 用 する 名 前<br />
(TestAndBranch) を 定 義 します。 また、 パラ メータ ($label、 $dest、 $reg、 およ<br />
び $cc) も 定 義 し ています。 指 定 されていないパラ メータは 空 の 文 字 列 に 置 き<br />
換 えられます。 このマクロでは、 構 文 エラーを 防 ぐために $dest、 $reg、 およ<br />
び $cc に 値 を 指 定 する 必 要 があ り ます。 アセンブ ラ は、 コー ド 内 で 指 定 さ れた<br />
値 でパラ メ ータ を 置 き 換 えます。<br />
こ のマ ク ロは、 以 下 の よ う に 呼 び 出 すこ と がで き ます。<br />
test TestAndBranch NonZero, r0, NE<br />
...<br />
...<br />
NonZero<br />
代 入 後 には 以 下 の よ う にな り ます。<br />
test CMP r0, #0<br />
BNE NonZero<br />
...<br />
...<br />
NonZero<br />
2.8.2 符 号 な し 整 数 除 算 マ ク ロのサンプル<br />
例 2-10 (ページ 2-52) は、 符 号 な し 整 数 を 除 算 する マ ク ロ を 示 し ています。<br />
このマクロは、 以 下 の 4 つのパラ メ ータ を 取 り ます。<br />
$Bot 除 数 を 保 持 する レ ジ ス タ。<br />
$Top<br />
命 令 の 実 行 前 に 被 除 数 を 保 持 し、 命 令 の 実 行 後 に 除 余 を 保 持 する<br />
レジスタ。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-51<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
$Div<br />
除 算 の 商 が 返 さ れる レ ジ ス タ。 除 余 のみが 必 要 な 場 合 は、 NULL<br />
("") を 指 定 できます。<br />
$Temp 計 算 中 に 使 用 さ れる 一 時 レ ジ ス タ。<br />
例 2-10<br />
MACRO<br />
$Lab DivMod $Div,$Top,$Bot,$Temp<br />
ASSERT $Top $Bot<br />
; Produce an error message if the<br />
ASSERT $Top $Temp<br />
; registers supplied are<br />
ASSERT $Bot $Temp<br />
; not all different<br />
IF "$Div" ""<br />
ASSERT $Div $Top<br />
; These three only matter if $Div<br />
ASSERT $Div $Bot ; is not null ("")<br />
ASSERT $Div $Temp ;<br />
ENDIF<br />
$Lab<br />
MOV $Temp, $Bot ; Put divisor in $Temp<br />
CMP $Temp, $Top, LSR #1 ; double it until<br />
90 MOVLS $Temp, $Temp, LSL #1 ; 2 * $Temp > $Top<br />
CMP $Temp, $Top, LSR #1<br />
BLS %b90 ; The b means search backwards<br />
IF "$Div" "" ; Omit next instruction if $Div is null<br />
MOV $Div, #0 ; Initialize quotient<br />
ENDIF<br />
91 CMP $Top, $Temp ; Can we subtract $Temp?<br />
SUBCS $Top, $Top,$Temp ; If we can, do so<br />
IF "$Div" "" ; Omit next instruction if $Div is null<br />
ADC $Div, $Div, $Div ; Double $Div<br />
ENDIF<br />
MOV $Temp, $Temp, LSR #1 ; Halve $Temp,<br />
CMP $Temp, $Bot ; and loop until<br />
BHS %b91 ; less than divisor<br />
MEND<br />
このマクロは、 複 数 のパラ メータが 同 一 レジスタを 使 用 していないかど うか<br />
をチェ ッ ク します。 また、 除 余 だけが 要 求 されている 場 合 には、 生 成 される<br />
コー ド を 最 適 化 し ます。<br />
アセンブラ ソースで 複 数 の DivMod を 使 用 している 場 合 にラベルの 多 重 定 義 を<br />
防 ぐために、 このマク ロではローカルラベル (90、 91) を 使 用 します。 詳 細<br />
については、 「ローカルラベル」 (ページ 2-14) を 参 照 して 下 さい。<br />
2-52 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
例 2-11 は、 上 記 のマ ク ロ を 以 下 のよ う に 呼 び 出 し た と きに 生 成 される コー ド<br />
を 示 しています。<br />
ratio DivMod r0,r5,r4,r2<br />
例 2-11<br />
ASSERT r5 r4<br />
; Produce an error if the<br />
ASSERT r5 r2<br />
; registers supplied are<br />
ASSERT r4 r2<br />
; not all different<br />
ASSERT r0 r5<br />
; These three only matter if $Div<br />
ASSERT r0 r4 ; is not null ("")<br />
ASSERT r0 r2 ;<br />
ratio<br />
MOV r2, r4 ; Put divisor in $Temp<br />
CMP r2, r5, LSR #1 ; double it until<br />
90 MOVLS r2, r2, LSL #1 ; 2 * r2 > r5<br />
CMP r2, r5, LSR #1<br />
BLS %b90 ; The b means search backwards<br />
MOV r0, #0 ; Initialize quotient<br />
91 CMP r5, r2 ; Can we subtract r2?<br />
SUBCS r5, r5, r2 ; If we can, do so<br />
ADC r0, r0, r0 ; Double r0<br />
MOV r2, r2, LSR #1 ; Halve r2,<br />
CMP r2, r4 ; and loop until<br />
BHS %b91 ; less than divisor<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-53<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
2.9 シンボルバージ ョ ンの 追 加<br />
<strong>ARM</strong> リンカは 「Base Platform ABI for the <strong>ARM</strong> Architecture」 (BPABI) に 準 拠<br />
し、 GNU 拡 張 シンボルバージ ョ ン 管 理 モデルをサポー ト し ます。<br />
既 存 のシンボルにシンボルのバージ ョ ン を 追 加 する には、 同 じ ア ド レ スで<br />
バージ ョ ンシンボルを 定 義 する 必 要 があ り ます。 シンボルのバージ ョ ンは 以<br />
下 のよ う な 形 式 にな り ます。<br />
• デフォル ト 以 外 のバージ ョ ンの 場 合 : name@ver<br />
• デフォル ト のバージ ョ ンの 場 合 : name@@ver<br />
シンボルのバージ ョ ンは 縦 棒 で 囲 む 必 要 があ り ます。<br />
例 えば、 デフ ォル ト のバージ ョ ンは 以 下 の よ う に 定 義 し ます。<br />
|my_versioned_symbol@@ver2|<br />
my_asm_function PROC<br />
...<br />
BX lr<br />
ENDP<br />
; Default version<br />
デフ ォル ト 以 外 のバージ ョ ンは 以 下 の よ う に 定 義 し ます。<br />
|my_versioned_symbol@ver1| ; Non default version<br />
my_old_asm_function PROC<br />
...<br />
BX lr<br />
ENDP<br />
RVCT のシンボルバージ ョ ン 管 理 の 詳 細 については、 『リンカユーザガイド』<br />
の 第 4 章 イ メージのシンボルへのアクセスを 参 照 して 下 さい。<br />
2-54 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
2.10 フ レームデ ィ レ ク テ ィ ブの 使 用<br />
以 下 のいずれかを 実 行 する 場 合 、 フ レームデ ィ レ ク テ ィ ブを 使 用 し て、 コー<br />
ド がス タ ッ ク を 使 用 する 方 法 を 記 述 する 必 要 があ り ます。<br />
• スタック 展 開 を 使 用 してアプリケーションをデバッグする。<br />
• フラッ トプロファイリングまたはコールグラフプロファイリングを 使 用<br />
する。<br />
これらのディレクティブの 詳 細 については、 「Frame ディレクティブ」 (ペー<br />
ジ 7-46) を 参 照 して 下 さい。<br />
アセンブラは、 フレームディ レ クテ ィブを 使 用 して、 生 成 する ELF 形 式 のオ<br />
ブジェ ク ト フ ァ イルに DWARF デバ ッ グフ レーム 情 報 を 挿 入 し ます。 この 情 報<br />
は、 デバ ッ ガがス タ ッ ク 展 開 と プロ フ ァ イ リ ングを 行 う と きに 必 要 です。 ス<br />
タ ッ クチェ ッ ク 修 飾 子 の 詳 細 については、<br />
install_directory\Documentation\Specifications\... にある 『Procedure Call<br />
Standard for the <strong>ARM</strong> Architecture』 (aapcs.pdf) を 参 照 して 下 さい。<br />
以 下 の 点 に 注 意 し て 下 さ い。<br />
• フレームディレクティブによって、 アセンブラが 生 成 したコードに 影 響<br />
が 及 ぶこ と はあ り ません。<br />
• アセンブ ラ では、 フ レームデ ィ レ ク テ ィ ブの 情 報 を 実 行 さ れた 命 令 に 対<br />
し て 検 証 し ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-55<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
2.11 アセンブリ 言 語 に 関 する 変 更<br />
表 2-11 は、 UAL アセンブラ 言 語 と 以 前 の 独 立 した <strong>ARM</strong> アセンブ ラ 言 語 およ<br />
び Thumb アセンブラ 言 語 との 違 いを 示 しています。 UAL 以 前 の <strong>ARM</strong> 構 文 は、<br />
アセンブラでも 認 識 されます。<br />
表 2-11 以 前 の <strong>ARM</strong> アセンブ リ 言 語 からの 変 更 点<br />
変 更 点 UAL 以 前 の <strong>ARM</strong> 構 文 適 切 な 構 文<br />
LDM および STM のデフ ォル ト のア ド レ ッ シングモー<br />
ドは IA です。<br />
<strong>ARM</strong> と Thumb では、 フル 下 降 ス タ ッ ク の 操 作 に<br />
PUSH ニーモニ ッ ク と POP ニーモニ ッ ク を 使 用 でき ま<br />
す。<br />
<strong>ARM</strong> と Thumb では、 ロ テー ト のみを 伴 う ( 他 の<br />
操 作 は 伴 わない) 命 令 の LSL、 LSR、 ASR、 ROR、 およ<br />
び RRX 命 令 ニーモニ ッ ク を 使 用 で き ます。<br />
プログラムカウンタ 相 対 アドレシングには、label<br />
形 式 を 使 用 し ます。 新 しいコードでは offset 形 式 は<br />
使 用 し ないで 下 さ い。<br />
ダブルワード メモ リ アクセスに 両 方 のレジスタを<br />
指 定 し ます。 使 用 で き る レ ジ ス タ の 組 み 合 わせに<br />
ついては、 規 則 に 従 う 必 要 があ り ます。<br />
{cond}??????????????????????????????<br />
<strong>ARM</strong> コード と Thumb-2 コードでは、 <strong>ARM</strong> の 条 件<br />
付 き 形 式 {cond} と Thumb-2 の IT 命 令 の 両 方 を 使 用<br />
する こ とができます。 アセンブ ラ は 両 者 の 整 合 性<br />
をチェ ッ ク し て、 現 在 の 命 令 セ ッ ト に 応 じ て 適 切<br />
なコードをアセンブルします。 IT 命 令 を 省 略 し た<br />
場 合 、 アセンブ ラ が Thumb-2 コー ド に 挿 入 し ます。<br />
LDMIA, STMIA<br />
STMFD sp!, {reglist}<br />
LDMFD sp!, {reglist}<br />
MOV Rd, Rn, LSL shift<br />
MOV Rd, Rn, LSR shift<br />
MOV Rd, Rn, ASR shift<br />
MOV Rd, Rn, ROR shift<br />
MOV Rd, Rn, RRX<br />
LDR Rd, [pc, #offset]<br />
LDRD Rd, addr_mode<br />
ADD{cond}S<br />
LDR{cond}SB<br />
ADDEQ r1, r2, r3<br />
LDRNE r1, [r2, r3]<br />
LDM, STM<br />
PUSH {reglist}<br />
POP {reglist}<br />
LSL Rd, Rn, shift<br />
LSR Rd, Rn, shift<br />
ASR Rd, Rn, shift<br />
ROR Rd, Rn, shift<br />
RRX Rd, Rn<br />
LDR Rd, label<br />
LDRD Rd, Rd2, addr_mode<br />
ADDS{cond}<br />
LDRSB{cond}<br />
ITEQ E ; optional<br />
ADDEQ r1, r2, r3<br />
LDRNE r1, [r2, r3]<br />
2-56 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
また、 それ 以 前 のアセンブラ と 比 較 し て 柔 軟 性 が 向 上 し ま し た ( 表 2-12 を 参<br />
照 )。<br />
表 2-12 要 件 の 緩 和<br />
変 更 点 適 切 な 構 文 使 用 可 能 な 構 文<br />
デス テ ィ ネーシ ョ ン レ ジ ス タ が 最 初 のオペラ ン ド と 同 じ 場 合 、<br />
2 レ ジ ス タ 形 式 の 命 令 を 使 用 で き ます。<br />
ADD r1, r1, r3<br />
ADD r1, r3<br />
UAL を 使 用 して Thumb-2 以 前 の Thumb プロセッサ 用 のソースコードを 記 述 で<br />
きます。<br />
Thumb-2 プロセッサ 以 前 のプロセッサ 用 の Thumb コードを 記 述 している 場<br />
合 、 そのプ ロ セ ッ サで 使 用 で き る 命 令 のみを 使 用 する よ う に 注 意 する 必 要 が<br />
あります。 使 用 で き ない 命 令 を 使 用 する と 、 アセンブ ラ か ら エ ラー メ ッ セー<br />
ジが 返 されます。<br />
Thumb-2 プロセッサ 用 の Thumb コー ド を 記 述 し てい る 場 合 は、 可 能 な 限 り 16<br />
ビッ ト 命 令 を 使 用 してコードサイズを 小 さ くすることができます。<br />
表 2-13 は、 UAL 以 前 の Thumb アセンブリ 言 語 と UAL と の 主 な 相 違 点 を 示 し<br />
ています。 アセンブラは、 構 文 の 前 に CODE16 ディレクティブが 使 用 されてい<br />
るか、 またはソースファイルが --16 コマンド ラインオプショ ンでアセンブル<br />
されている 場 合 にのみ UAL 以 前 の Thumb 構 文 を 認 識 します。<br />
表 2-13 UAL 以 前 の Thumb 構 文 と UAL 構 文 の 相 違 点<br />
変 更 点 UAL 以 前 の Thumb 構 文 UAL の 構 文<br />
LDM および STM のデフ ォル ト のア ド レ ッ シングモー<br />
ドは IA です。<br />
フ ラ グ を 更 新 する 命 令 では 後 置 の S を 使 用 する 必 要<br />
があ り ます。 これは、 32 ビッ トの Thumb-2 命 令 と<br />
の 競 合 を 防 止 する ために 必 要 な 変 更 で し た。<br />
ALU 命 令 では、 3 本 のレ ジ ス タ を 指 定 する のが 適<br />
切 な 形 式 です (これには、 デステ ィ ネーシ ョ ンレ<br />
ジスタが 最 初 のオペランド と 同 じ 場 合 も 含 まれま<br />
す)。<br />
LDMIA, STMIA<br />
ADD r1, r2, r3<br />
SUB r4, r5, #6<br />
MOV r0, #1<br />
LSR r1, r2, #1<br />
ADD r7, r8<br />
SUB r1, #80<br />
LDM, STM<br />
ADDS r1, r2, r3<br />
SUBS r4, r5, #6<br />
MOVS r0, #1<br />
LSRS r1, r2, #1<br />
ADD r7, r7, r8<br />
SUBS r1, r1, #80<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 2-57<br />
Non-Confidential
<strong>ARM</strong> アセン ブ リ 言 語 の 記 述<br />
表 2-13 UAL 以 前 の Thumb 構 文 と UAL 構 文 の 相 違 点 ( 続 き)<br />
変 更 点 UAL 以 前 の Thumb 構 文 UAL の 構 文<br />
Rd と Rn がどちら も Lo レ ジ ス タ の 場 合 、 MOV Rd, Rn<br />
は ADDS Rd, Rn, #0 として 逆 アセンブルされます。<br />
MOV r2, r3<br />
MOV r8, r9<br />
CPY r0, r1<br />
LSL r2, r3, #0<br />
ADDS r2, r3, #0<br />
MOV r8, r9<br />
MOV r0, r1<br />
MOVS r2, r3<br />
NEG Rd, Rm は RSBS Rd, Rm, #0 として 逆 アセンブルさ<br />
れます。<br />
NOP 命 令 は、 MOV r8, r8 を 置 き 換 え ます ( 可 能 な 場<br />
合 )。<br />
NEG Rd, Rm RSBS Rd, Rm, #0<br />
- NOP NOP MOV r8, r8<br />
2-58 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
第 3 章<br />
アセン ブ ラ に 関 する 参 考 情 報<br />
本 章 には、 <strong>ARM</strong> ® アセンブ ラ に 関 する 一 般 的 な 参 考 情 報 が 記 載 さ れています。<br />
以 下 のセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「コ マン ド 構 文 」 (ページ 3-2)<br />
• 「ソース 行 の 形 式 」 (ページ 3-23)<br />
• 「 定 義 済 みのレ ジ ス タおよびコ プ ロ セ ッ サ 名 」 (ページ 3-24)<br />
• 「 組 み 込 み 変 数 および 定 数 」 (ページ 3-26)<br />
• 「シンボル」 (ページ 3-29)<br />
• 「 式 、 リ テ ラ ル、 演 算 子 」 (ページ 3-35)<br />
• 「 診 断 メ ッ セージ」 (ページ 3-49)<br />
• 「C プリプロセッサを 使 用 する」 (ページ 3-51)<br />
本 章 では、 <strong>ARM</strong> アセンブ リ 言 語 の 記 述 方 法 についての 説 明 は 割 愛 いた し ま<br />
す。 チュート リ アル 情 報 については、 第 2 章 <strong>ARM</strong> アセンブ リ 言 語 の 記 述 を 参<br />
照 して 下 さい。<br />
本 章 では、 命 令 、 デ ィ レ ク テ ィ ブ、 および 疑 似 命 令 についての 説 明 も 割 愛 い<br />
たします。 これら の 参 照 情 報 については、 該 当 する 各 章 を 参 照 し て 下 さ い。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-1<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
3.1 コマンド 構 文<br />
このセクションでは、armasm についてのみ 説 明 し ます。 インラインアセンブラ<br />
と 組 み 込 みアセンブ ラ は C および C++ コ ンパイ ラ の 一 部 であ り 、 独 自 のコ マ<br />
ンド 構 文 は 持 ちません。<br />
armasm コ マン ド ラ イ ンでは、 フ ァ イル 名 や 指 定 さ れてい る 場 合 を 除 き、 大 文<br />
字 と 小 文 字 の 区 別 があ り ます。 <strong>ARM</strong> アセンブラでは、 『コンパイラユーザガ<br />
イド』 の 「コマンド ラ インオプシ ョ ンの 順 序 」 (ページ 2-12) で 説 明 してあ<br />
る と お り 、 通 常 の コ マン ド ラ イ ン 順 序 付 け 規 則 が 使 用 さ れます。 したがって、<br />
コマンド ラインに 互 いに 競 合 するオプショ ンが 含 まれている 場 合 、 最 後 に 見<br />
つかったオプシ ョ ンが 常 に 優 先 されます。<br />
<strong>ARM</strong> アセンブ ラ は、 次 の コ マン ド を 使 用 し て 起 動 し ます。<br />
armasm {options} {inputfile}<br />
ここで、options は、 以 下 のオプシ ョ ン を 任 意 に 組 み 合 わせて 指 定 し ます。 各<br />
オプシ ョ ンはスペースで 区 切 って 下 さい。<br />
--16 UAL 以 前 の Thumb 構 文 を 使 用 して、 命 令 を Thumb ® 命 令 と し て<br />
解 釈 する よ う にアセンブ ラ に 指 示 し ます。 このオプションは、<br />
ソースファイルの 冒 頭 の CODE16 デ ィ レ ク テ ィ ブに 相 当 し ます。<br />
UAL 構 文 を 使 用 し て Thumb 命 令 ま たは Thumb-2 命 令 を 指 定 する<br />
には、--thumb オプシ ョ ンを 使 用 し ます。<br />
--32 --arm と 同 じ 意 味 です。<br />
--apcs qualifier<br />
<strong>ARM</strong> アーキテクチャのプロシージャ コール 標 準 (AAPCS) を 使<br />
用 する かど う かを 指 定 し ます。 コー ド セ ク シ ョ ンの 属 性 を 一 部 指<br />
定 する こ と も で き ます。 詳 細 については、 「AAPCS」 (ページ<br />
3-11) を 参 照 して 下 さい。<br />
--arm<br />
--arm_only<br />
--bi<br />
<strong>ARM</strong> 命 令 と し て 命 令 を 解 釈 する よ う にアセンブ ラ に 指 示 し ま<br />
す。 ただし、 オブジェ ク ト フ ァ イル 中 のコードが、 必 ずし も<br />
<strong>ARM</strong> コードだけとなるわけではあ り ません。 これがデフォルト<br />
です。<br />
<strong>ARM</strong> コー ド だけを 生 成 する よ う にアセンブ ラ に 指 示 し ます。 得<br />
られるオブジェク ト ファイルには、 Thumb コードは 存 在 しませ<br />
んし、 存 在 するこ とはできません。<br />
--bigend と 同 じ 意 味 です。<br />
3-2 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
--bigend<br />
ビッグエンディアン <strong>ARM</strong> プロセッサに 適 したコードをアセンブ<br />
ルする よ う にアセンブ ラ に 指 示 し ます。 デフォル ト は --littleend<br />
です。<br />
--brief_diagnostics<br />
詳 細 については、 「 診 断 メ ッ セージの 出 力 の 制 御 」 (ページ 3-19)<br />
を 参 照 して 下 さい。<br />
--checkreglist<br />
RLIST、 LDM、 および STM レジスタ リ ス ト をチェッ クして、 すべて<br />
のレジスタが 昇 順 のレジスタ 番 号 順 に 指 定 されているこ とを 確<br />
認 する よ う にアセンブ ラ に 指 示 し ます。 レジスタが 昇 順 で 指 定 さ<br />
れていない 場 合 は 警 告 が 表 示 されます。<br />
こ のオプシ ョ ンの 使 用 は 廃 止 さ れる 予 定 です。 代 わ り に<br />
----diag_warning 1206 を 使 用 して 下 さい (「 診 断 メ ッ セージの 出 力<br />
の 制 御 」 (ページ 3-19) を 参 照 )。<br />
--cpreproc<br />
入 力 フ ァ イルを 前 処 理 し てか ら アセンブルする ために armcc を 呼<br />
び 出 すよ う アセンブ ラ に 指 示 し ます。 詳 細 については、 「C プリ<br />
プ ロ セ ッ サを 使 用 する」 (ページ 3-51) を 参 照 して 下 さい。<br />
--cpreproc_opts=options<br />
C プリプロセッサ 使 用 時 にアセンブラがコンパイラオプションを<br />
armcc に 渡 せる よ う にし ます。 詳 細 については、 「C プリプロセッ<br />
サを 使 用 する」 (ページ 3-51) を 参 照 して 下 さい。<br />
options はオプシ ョ ン と その 値 のコ ンマ 区 切 り リ ス ト です。<br />
--cpu name ターゲッ トの CPU を 設 定 し ます。 詳 細 については、 「CPU 名 」<br />
(ページ 3-13) を 参 照 して 下 さい。<br />
--debug<br />
DWARF デバ ッ グテーブルを 生 成 する よ う にアセンブ ラ に 指 示 し<br />
ます。--debug は -g と 同 じ 意 味 です。<br />
デフォル ト は DWARF 3 です。<br />
注<br />
ローカルシンボルは --debug では 保 持 されません。 デバ ッ グのた<br />
めにローカルシンボルを 保 持 する 場 合 は、--keep を 指 定 する 必 要<br />
があ り ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-3<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
--depend dependfile<br />
--depend_format=string<br />
--device=list<br />
--device=name<br />
ソース フ ァ イルの 依 存 関 係 リ ス ト を dependfile に 保 存 する よ う ア<br />
センブラに 指 示 します。 これらのオプショ ンは、 make ユーテ ィ<br />
リティとの 使 用 に 適 しています。<br />
これによ り、 UNIX の 一 部 の make プ ロ グ ラ ム と の 互 換 性 を 確 保<br />
する ために、 出 力 に 依 存 する フ ァ イ ルの 形 式 が UNIX 形 式 の<br />
フォーマッ トに 変 更 されます。<br />
string の 値 には、 以 下 のいずれかを 指 定 でき ます。<br />
unix<br />
UNIX 形 式 のパス 区 切 り 文 字 を 使 用 し て 依 存 関 係 フ ァ<br />
イルを 生 成 します。<br />
unix_escaped<br />
動 作 は unix と 同 じですが、 スペースをバックスラッ<br />
シュでエスケープします。<br />
unix_quoted<br />
動 作 は unix と 同 じ ですが、 パス 名 を 二 重 引 用 符 で 囲 み<br />
ます。<br />
--device=name オプシ ョ ンで 使 用 可 能 なサポー ト さ れてい るデバイ<br />
ス 名 を 指 定 します。<br />
特 定 のデバ イ ス を 選 択 し、 関 連 する プ ロ セ ッ サ 設 定 を 設 定 し ま<br />
す。 『コンパイ ラ リ ファレンスガイ ド』 の 「--device=name」<br />
(ページ 2-49) を 参 照 して 下 さい。<br />
--diag_[error | remark | warning | suppress | style]<br />
詳 細 については、 「 診 断 メ ッ セージの 出 力 の 制 御 」 (ページ 3-19)<br />
を 参 照 して 下 さい。<br />
--dllexport_all<br />
ソースディ レクティブによってオーバーライ ド されない 限 り、<br />
エクスポート されたすべてのグローバルシンボルに STV_HIDDEN で<br />
はな く ELF における STV_PROTECTED 可 視 性 を 付 与 し ます<br />
(「EXPORT、 GLOBAL」 (ページ 7-92) を 参 照 )。<br />
3-4 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
--dwarf2<br />
--dwarf3<br />
--debug オプシ ョ ン と と もに 使 用 して、 DWARF 2 デバ ッ グテーブ<br />
ルを 生 成 する よ う にアセンブ ラ に 指 示 し ます。<br />
--debug とともに 使 用 して、DWARF 3 デバ ッ グテーブルを 生 成 す<br />
るようにアセンブラに 指 示 します。 --debug が 指 定 されている 場<br />
合 、 こ れがデフ ォル ト にな り ます。<br />
--errors errorfile<br />
エラーメ ッセージを errorfile に 出 力 する よ う にアセンブ ラ に 指<br />
示 します。<br />
--exceptions 詳 細 については、 「 例 外 テーブル 生 成 を 制 御 する」 (ページ 3-21)<br />
を 参 照 して 下 さい。<br />
--exceptions_unwind<br />
--fpmode model<br />
詳 細 については、 「 例 外 テーブル 生 成 を 制 御 する」 (ページ 3-21)<br />
を 参 照 して 下 さい。<br />
浮 動 小 数 点 適 合 性 を 指 定 し、 ラ イ ブ ラ リ の 属 性 と 浮 動 小 数 点 の<br />
最 適 化 を 設 定 し ます。 詳 細 については、 「 浮 動 小 数 点 モデル」<br />
(ページ 3-12) を 参 照 して 下 さい。<br />
--fpu name<br />
ターゲッ トの 浮 動 小 数 点 ユニ ッ ト (FPU) アーキテクチャを 選 択<br />
します。 詳 細 については、 「FPU 名 」 (ページ 3-14) を 参 照 して<br />
下 さい。<br />
-g --debug と 同 じ 意 味 です。<br />
-idir{,dir,…}<br />
ソース フ ァ イルにデ ィ レ ク ト リ を 追 加 し て 完 全 修 飾 名 を 付 け ま<br />
す (「GET、 INCLUDE」 (ページ 7-95) を 参 照 )。<br />
--keep<br />
--length<br />
--li<br />
デバッガで 使 用 できるように、 オブジェクトファイルのシンボ<br />
ルテーブル 内 に ローカルラベルを 保 持 する よ う にアセンブ ラ に<br />
指 示 し ます (「KEEP」 (ページ 7-101) を 参 照 )。<br />
「 リ ス ト を フ ァ イ ルに 出 力 する」 (ページ 3-18) を 参 照 して 下 さ<br />
い。<br />
--littleend と 同 じ 意 味 です。<br />
--library_type=lib<br />
リ ン ク 時 に 使 用 する 関 連 ラ イブラ リ の 選 択 を 有 効 にし ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-5<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
lib は 以 下 のいずれかを 指 定 でき ます。<br />
standardlib リンク 時 にフル <strong>ARM</strong> ランタイムライブラ リ<br />
を 選 択 する よ う に 指 定 し ます。 これがデフォ<br />
ルトです。<br />
microlib<br />
リンク 時 に C マイクロライブラ リ (microlib)<br />
を 選 択 する よ う に 指 定 し ます。<br />
注<br />
このオプションは、 ライブラ リを 使 用 する 際 に、 よ り 特 化 した<br />
最 適 化 を 必 要 と する と き に、 コ ンパ イ ラ、 アセンブ ラ、 ま たは<br />
リンカで 使 用 できます。<br />
このオプションでリンカを 使 用 すると、 他 のすべての<br />
--library_type オプシ ョ ンをオーバーラ イ ド し ます。<br />
詳 細 については、 以 下 を 参 照 し て 下 さ い。<br />
• 『ライブラ リ ガイ ド』 の 「microlib を 使 用 したアプ リ ケー<br />
シ ョ ンの 作 成 」 (ページ 3-4)<br />
• 『コンパイ ラ リ ファレンスガイ ド』 の<br />
「--library_type=lib」 (ページ 2-90)<br />
--licretry<br />
--list file<br />
--littleend<br />
特 定 の FLEXnet エラーコードに 遭 遇 したらすぐに、 ライセンス<br />
の 確 認 を 約 10 秒 間 隔 で 最 大 10 回 再 試 行 する よ う にアセンブ ラ に<br />
指 示 し ます。<br />
このオプシ ョ ンは、 アセンブラによって 生 成 されたアセンブリ<br />
言 語 の 詳 細 な リ ス ト を file に 出 力 する よ う にアセンブ ラ に 指 示<br />
します。 詳 細 については、 「 リ ス ト を フ ァ イルに 出 力 する」 (ペー<br />
ジ 3-18) を 参 照 して 下 さい。<br />
リトルエンディアン <strong>ARM</strong> プロセッサに 適 したコードをアセンブ<br />
ルする よ う にアセンブ ラ に 指 示 し ます。<br />
-m ソース フ ァ イルの 依 存 関 係 リ ス ト を stdout に 書 き 込 むよ う にア<br />
センブラに 指 示 します。<br />
--maxcache n 最 大 ソ ース キ ャ ッ シ ュ サ イ ズを n バイ ト に 設 定 し ます。 デフォル<br />
トは 8MB です。 armasm では、 サイズが 8MB を 下 回 る と 警 告 が 表<br />
示 されます。<br />
--md<br />
ソース フ ァ イルの 依 存 関 係 リ ス ト を inputfile.d に 書 き 込 むよ う<br />
にアセンブラに 指 示 します。<br />
3-6 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
--memaccess attributes<br />
ターゲッ ト メモリ システムのメモリ アクセス 属 性 を 指 定 します。<br />
詳 細 については、 「 メ モ リ ア ク セ ス 属 性 」 (ページ 3-16) を 参 照<br />
して 下 さい。<br />
注<br />
----memaccess オプシ ョ ンの 使 用 は 廃 止 さ れる 予 定 です。<br />
--no_code_gen<br />
パス 1 の 後 に 終 了 する よ う にアセンブ ラ に 指 示 し ます。 オブジ ェ<br />
クトファイルは 生 成 されません。<br />
--no_esc<br />
\n や \t など、 C 形 式 のエス ケープ 処 理 し た 特 殊 文 字 を 無 視 する<br />
ようにアセンブラに 指 示 します。<br />
--no_exceptions<br />
--no_exceptions_unwind<br />
詳 細 については、 「 例 外 テーブル 生 成 を 制 御 する」 (ページ 3-21)<br />
を 参 照 して 下 さい。<br />
詳 細 については、 「 例 外 テーブル 生 成 を 制 御 する」 (ページ 3-21)<br />
を 参 照 して 下 さい。<br />
--no_hide_all<br />
ソースディ レクティブによってオーバーライ ド されない 限 り、<br />
エクスポートおよびインポート されたすべてのグローバルシン<br />
ボルに STV_HIDDEN ではな く ELF におけ る STV_DEFAULT 可 視 性 を 付<br />
与 します (「EXPORT、 GLOBAL」 (ページ 7-92) と 「IMPORT、<br />
EXTERN」 (ページ 7-97) を 参 照 )。<br />
--no_regs<br />
--no_terse<br />
レ ジ ス タ 名 を 事 前 定 義 し ない よ う にアセンブ ラ が 設 定 さ れます。<br />
定 義 済 みのレジス タ 名 の リ ス ト については、 「 定 義 済 みのレ ジ ス<br />
タおよびコプロセッサ 名 」 (ページ 3-24) を 参 照 して 下 さい。<br />
このオプショ ンは 使 用 が 制 限 されています。 代 わ り に<br />
--regnames=none を 使 用 して 下 さい。<br />
「 リ ス ト を フ ァ イ ルに 出 力 する」 (ページ 3-18) を 参 照 して 下 さ<br />
い。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-7<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
--no_unaligned_access<br />
オブジ ェ ク ト フ ァ イルにおいて、 非 境 界 整 列 ア ク セス を 使 用 し<br />
ない よ う に 指 示 する 属 性 を 設 定 する よ う にアセンブ ラ に 指 示 し<br />
ます。<br />
--no_warn<br />
警 告 メ ッ セージをオフに し ます。<br />
-o filename 出 力 オブジ ェ ク ト フ ァ イ ルに 名 前 を 付 け ます。 このオプショ ンが<br />
指 定 されていない 場 合 、 アセンブラは、 inputfilename.o という 形<br />
式 でオブジェ ク ト のフ ァ イル 名 を 作 成 します。 このオプショ ンで<br />
は 大 文 字 と 小 文 字 が 区 別 さ れます。<br />
--pd<br />
--predefine と 同 じ 意 味 です。<br />
--predefine "directive"<br />
--[no_]project=filename<br />
--[no_]reduce_paths<br />
いずれかの SET デ ィ レ ク テ ィ ブを 事 前 実 行 する よ う にアセンブ ラ<br />
に 指 示 し ます。 詳 細 については、 「SET ディレクティブを 事 前 に<br />
実 行 する」 (ページ 3-16) を 参 照 して 下 さい。 これは 条 件 付 きア<br />
センブリに 便 利 です (「 定 義 さ れる 変 数 に 基 づ く 条 件 付 き アセン<br />
ブリ」 (ページ 7-44) を 参 照 )。<br />
詳 細 については、 「プロ ジェ ク ト テンプレー ト オプシ ョ ン」<br />
(ページ 3-19) を 参 照 して 下 さい。<br />
ファ イルパスの 冗 長 なパス 名 情 報 の 除 外 を 有 効 にするかまたは<br />
無 効 に し ます。 このオプションは Windows システムでのみ 使 用 で<br />
きます。<br />
Windows システムには、 ファイルパスが 260 文 字 まで と い う 制 限<br />
があ り ます。 絶 対 パス 名 が 260 文 字 を 超 え る 相 対 パス 名 が 存 在 す<br />
る 場 合 、 --reduce_paths オプシ ョ ンを 使 用 して、 ディ レ ク ト リ を<br />
.. の 対 応 する イ ン ス タ ン ス と マ ッチア ッ プし、 デ ィ レ ク ト リ /..<br />
シーケンスをペアで 削 除 する こ とによ り 、 絶 対 パス 名 の 長 さ を<br />
短 縮 で き ます。<br />
注<br />
--reduce_paths オプシ ョ ン を 使 用 し てパスの 長 さ を 短 縮 するので<br />
はな く 、 長 いフ ァ イルパスや 深 いネ ス ト 構 造 のフ ァ イルパス を<br />
使 用 し ない よ う にする こ と をお 勧 め し ます。<br />
3-8 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
--regnames=none<br />
--regnames=callstd<br />
--regnames=all<br />
--reinitialize_workdir<br />
--show_cmdline<br />
詳 細 については、 『コンパイ ラ リ ファレンスガイ ド』 の<br />
「--reduce_paths, --no_reduce_paths」 (ページ 2-122) を<br />
参 照 し て 下 さ い。<br />
レ ジ ス タ 名 を 事 前 定 義 し ない よ う にアセンブ ラ が 設 定 さ れます。<br />
定 義 済 みのレジス タ 名 の リ ス ト については、 「 定 義 済 みのレ ジ ス<br />
タおよびコプロセッサ 名 」 (ページ 3-24) を 参 照 して 下 さい。<br />
--apcs オプシ ョ ンで 指 定 された、 使 用 中 の AAPCS バリアントに<br />
基 づいて 追 加 のレ ジ ス タ 名 を 定 義 し ます ( 詳 細 については、<br />
「AAPCS」 (ページ 3-11) を 参 照 )。<br />
--apcs の 値 に 関 係 な く すべての AAPCS レジスタを 定 義 します<br />
( 詳 細 については、 「AAPCS」 (ページ 3-11) を 参 照 )。<br />
詳 細 については、 「プロ ジェ ク ト テンプレー ト オプシ ョ ン」<br />
(ページ 3-19) を 参 照 して 下 さい。<br />
アセンブラがコマンド ラ インをどのよ うに 処 理 したのかを 表 示<br />
します。 コ マン ド は 正 規 化 さ れて 表 示 さ れます。 ま た、 via ファ<br />
イルの 内 容 は 展 開 されます。<br />
--split_ldm<br />
--thumb<br />
長 い LDM および STM 命 令 をエ ラーにする よ う にアセンブ ラ に 指 示<br />
します。 詳 細 については、 「 長 い LDM と STM を 分 割 する」 (ペー<br />
ジ 3-17) を 参 照 して 下 さい。 このオプショ ンは 使 用 が 制 限 されて<br />
います。<br />
UAL 構 文 を 使 用 して、 Thumb 命 令 と し て 命 令 を 解 釈 する よ う に<br />
アセンブ ラ に 指 示 し ます。 このオプションは、 ソースファイルの<br />
冒 頭 の THUMB ディレクティブに 相 当 します。<br />
--unaligned_access<br />
オブジ ェ ク ト フ ァ イルにおいて、 非 境 界 整 列 ア ク セスの 使 用 を<br />
指 示 する 属 性 を 設 定 する よ う にアセンブ ラ に 指 示 し ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-9<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
--unsafe<br />
異 なるアーキテ クチャの 命 令 をエラーなしでアセンブルし ます。<br />
詳 細 については、 「 診 断 メ ッ セージの 出 力 の 制 御 」 (ページ 3-19)<br />
を 参 照 して 下 さい。<br />
--untyped_local_labels<br />
Thumb コー ド 内 の ラベルへの 参 照 時 に Thumb ビッ トを 設 定 しな<br />
い よ う にアセンブ ラ に 指 示 し ます。 詳 細 については、 「LDR 疑 似<br />
命 令 」 (ページ 4-170) を 参 照 して 下 さい。<br />
--via file<br />
file を 開 き、 コマン ド ラ イン 引 数 を 読 み 込 むよ う にアセンブラ<br />
に 指 示 し ます。 詳 細 については、 『コンパイ ラ リ ファレンスガイ<br />
ド』 の 付 録 A via ファイルの 構 文 を 参 照 して 下 さい。<br />
--width 詳 細 については、 「 リ ス ト を フ ァ イルに 出 力 する」 (ページ 3-18)<br />
を 参 照 して 下 さい。<br />
--workdir=directory<br />
詳 細 については、 「プロ ジェ ク ト テンプレー ト オプシ ョ ン」<br />
(ページ 3-19) を 参 照 して 下 さい。<br />
--xref 詳 細 については、 「 リ ス ト を フ ァ イルに 出 力 する」 (ページ 3-18)<br />
を 参 照 して 下 さい。<br />
inputfile<br />
アセンブ ラ の 入 力 フ ァ イ ルを 指 定 し ます。 入 力 フ ァ イ ルは、 UAL<br />
アセンブ リ 言 語 ソースファ イル、 または UAL 以 前 の Thumb アセ<br />
ンブ リ 言 語 ソース フ ァ イルを 指 定 する 必 要 があ り ます。<br />
3.1.1 利 用 可 能 なオプシ ョ ンのリ ス ト を 取 得 する<br />
利 用 可 能 なアセンブ ラ コ マン ド ラ イ ンオプシ ョ ンの リ ス ト を 取 得 する には、<br />
次 のコマン ド を 入 力 し ます。<br />
armasm --help<br />
3.1.2 環 境 変 数 を 使 用 し て コ マン ド ラ イ ンオプシ ョ ン を 指 定 する<br />
コマンド ラインオプショ ンは、RVCT40_ASMOPT 環 境 変 数 の 値 を 設 定 する こ と に<br />
よって 指 定 できます。 この 構 文 は、 コマンドライン 構 文 と 同 じです。 アセンブ<br />
ラは、RVCT40_ASMOPT の 値 を 読 み 込 み、 コ マン ド 文 字 列 の 前 に 挿 入 し ます。 これ<br />
によ り、RVCT40_ASMOPT で 指 定 されたオプシ ョ ンは、 コマン ド ラ イ ンの 引 数 に<br />
よってオーバーライド 可 能 になります。<br />
3-10 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
3.1.3 AAPCS<br />
<strong>ARM</strong> アーキテクチャのプロシージャ コール 標 準 (AAPCS) を 使 用 するかど う<br />
かを 指 定 する オプシ ョ ンがあ り ます。<br />
--apcs qualifier<br />
AAPCS は Base Standard Application Binary Interface for the <strong>ARM</strong> Architecture<br />
(BSABI) 仕 様 の 一 部 です。 AAPCS に 準 拠 し た コード を 記 述 する と、 別 々にコ<br />
ンパイルおよびアセンブルしたモジュールを 連 動 させる こ とができます。<br />
--apcs オプシ ョ ンはコー ド セ ク シ ョ ンの 属 性 を 一 部 指 定 する こ と も で き ます。<br />
詳 細 については、 install_directory\Documentation\Specifications\... にある<br />
『<strong>ARM</strong> アーキテ クチャ 向 けプロシージャ コール 標 準 』 (aapcs.pdf) を 参 照 して<br />
下 さい。<br />
注<br />
アセンブラによ り 生 成 されたコードは、 AAPCS 修 飾 子 の 影 響 を 受 けません。<br />
AAPCS 修 飾 子 は、 inputfile 内 のコード が AAPCS の 特 定 のバ リ アン ト に 準 拠<br />
し てい る こ と をプ ロ グ ラ マが 確 認 する ためのアサー ト です。 AAPCS 修 飾 子 に<br />
より、アセンブラによって 生 成 されたオブジェクトファイル 内 で 属 性 が 設 定<br />
されます。 リ ンカはこれらの 属 性 を 使 用 してフ ァ イルの 互 換 性 をチェ ッ ク し、<br />
適 切 な ラ イ ブ ラ リ バ リ アン ト を 選 択 し ます。<br />
qualifier の 値 は 以 下 の とお り です。<br />
?? inputfile で AAPCS が 使 用 されないよ う に 指 定 し ます。<br />
AAPCS レジスタは 設 定 されません。 none を 使 用 する 場 合 、<br />
他 の 修 飾 子 は 使 用 でき ません。<br />
/interwork<br />
/nointerwork<br />
/inter<br />
/nointer<br />
inputfile のコードを <strong>ARM</strong> と Thumb のインターワークに 適<br />
したコードにアセンブルするよ うに 指 定 します。 詳 細 につ<br />
いては、 『デベロ ッパガイ ド』 の 第 5 章 <strong>ARM</strong> と Thumb の<br />
インターワークを 参 照 して 下 さい。<br />
inputfile のコードを <strong>ARM</strong> と Thumb のインターワークに 適<br />
したコードにアセンブルするよ うに 指 定 します。 これがデ<br />
フォルトです。<br />
/interwork と 同 じ 意 味 です。<br />
/nointerwork と 同 じ 意 味 です。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-11<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
/ropi<br />
/noropi<br />
/pic<br />
/nopic<br />
/rwpi<br />
/norwpi<br />
/pid<br />
/nopid<br />
/fpic<br />
inputfile の 内 容 を、 読 み 出 し 専 用 の 位 置 非 依 存 と する よ う<br />
に 指 定 し ます。<br />
inputfile の 内 容 を、 読 み 出 し 専 用 の 位 置 非 依 存 と し ない よ<br />
う に 指 定 し ます。 これがデフォルトです。<br />
/ropi と 同 じ 意 味 です。<br />
/noropi と 同 じ 意 味 です。<br />
inputfile の 内 容 を、 読 み 出 し - 書 き 込 み 可 能 な 位 置 非 依 存<br />
とするよ うに 指 定 します。<br />
inputfile の 内 容 を、 読 み 出 し - 書 き 込 み 可 能 な 位 置 非 依 存<br />
としないように 指 定 します。 これがデフォルトです。<br />
/rwpi と 同 じ 意 味 です。<br />
/norwpi と 同 じ 意 味 です。<br />
inputfile の 内 容 を、 FPIC ア ド レ ス 指 定 を 必 要 と する 読 み<br />
出 し 専 用 の 位 置 非 依 存 コー ド と する よ う に 指 定 し ます。<br />
注<br />
qualifier を 複 数 指 定 する 場 合 、 リ ス ト 内 の 個 々の 修 飾 子 間 にスペース も コ ン<br />
マも 挿 入 されていないことを 確 認 して 下 さい。<br />
3.1.4 浮 動 小 数 点 モデル<br />
<strong>ARM</strong> アセンブ ラ には、 浮 動 小 数 点 モデルを 指 定 する オプシ ョ ンがあ り ます。<br />
--fpmode model<br />
ターゲ ッ ト の 浮 動 小 数 点 モデルを 選 択 し、 リ ン ク 時 に 最 適 な ラ<br />
イブラ リ を 選 択 する よ う に 属 性 を 設 定 します。<br />
注<br />
こ のオプシ ョ ンに よ っ て、 記 述 し た コー ド を 変 更 する 必 要 はあ<br />
りません。<br />
3-12 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
model 以 下 のいずれかを 指 定 で き ます。<br />
ieee_full IEEE 標 準 で 保 証 さ れてい るすべての 機 能 、 演 算 、 および 表 現 を、<br />
単 精 度 および 倍 精 度 で 使 用 で き ます。 演 算 モー ド は、 実 行 時 に 動<br />
的 に 選 択 で き ます。<br />
ieee_fixed 最 近 接 値 への 丸 め、 不 正 確 な 例 外 な し の IEEE 標 準 。<br />
ieee_no_fenv 最 も 近 い 値 に 丸 め、 例 外 を 発 生 させない IEEE 標 準 。 このモード<br />
は、 Java 浮 動 小 数 点 算 術 モデル と 互 換 性 があ り ます。<br />
std<br />
fast<br />
0 にフ ラ ッ シ ュ さ れる 非 正 規 化 数 があ り 、 最 も 近 い 値 に 丸 め、 例<br />
外 の 発 生 を 報 告 しない IEEE 有 限 値 。 このモードは C および C++<br />
と 互 換 性 があ り ます。 これはデフォルトオプショ ンです。<br />
有 限 値 は、 IEEE 標 準 に よ って 予 測 さ れます。 NaN ( 非 数 ) およ<br />
び 無 限 値 は、 IEEE モデルによ って 定 義 されている 一 部 の 状 況 で<br />
生 成 さ れない 場 合 があ り ます。 ま た、 生 成 さ れた と し て も、 記<br />
号 が 同 じにな る と は 限 り ません。 さらに、ゼロの 記 号 が、IEEE<br />
モデルによって 予 測 された 記 号 でない 場 合 もあり ます。<br />
あ る 数 値 が 最 適 化 を 変 え る。 こ の 場 合 、 高 速 実 行 の 代 わ り に 精<br />
度 が 犠 牲 にな り ます。 このモードは IEEE 互 換 で も、 標 準 C 形 式<br />
でもありません。<br />
3.1.5 CPU 名<br />
CPU 名 を 指 定 する オプシ ョ ンがあ り ます。<br />
--cpuname ターゲッ トの CPU を 設 定 し ます。 命 令 に よ っ ては、 間 違 った<br />
ターゲッ ト CPU にアセンブルされる と、 エラーまたは 警 告 が 表<br />
示 される 場 合 があり ます (「 診 断 メ ッ セージの 出 力 の 制 御 」<br />
(ページ 3-19) も 参 照 )。<br />
name に 指 定 でき る 有 効 値 は、 4T、 5TE、 6T2 などのアーキテクチャ<br />
の 名 前 か、 <strong>ARM</strong>7TDMI などの 部 品 番 号 です。 アーキテクチャの 詳 細<br />
については、 『<strong>ARM</strong> アーキテクチャ リ フ ァ レンスマニュアル』 を<br />
参 照 し て 下 さ い。 デフォル ト は <strong>ARM</strong>7TDMI ® です。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-13<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
注<br />
--cpu=7 を 使 用 する と、 <strong>ARM</strong>v7-A、 <strong>ARM</strong>v7-R、 および <strong>ARM</strong>v7-M<br />
の 各 アーキテ クチャによ ってサポー ト される コード が 生 成 され<br />
ます。 つま り、 アセンブラは <strong>ARM</strong>v7-A、 <strong>ARM</strong>v7-R、 および<br />
<strong>ARM</strong>v7-M の 各 アーキテ ク チ ャ で 使 用 で き る Thumb 命 令 だけを<br />
生 成 する よ う 制 限 さ れてい る こ と にな り ます。<br />
リ ン ク 時 のソ フ ト ウ ェ ア ラ イブラ リ の 選 択 に 対 する 影 響 については、 『リンカ<br />
ユーザガ イ ド』 を 参 照 して 下 さい。<br />
有 効 な CPU 名 のリ ス ト を 取 得 する<br />
次 のコマン ド を 使 用 してアセンブラ を 起 動 する と、 有 効 な CPU 名 およびアー<br />
キテクチャ 名 のリ ス ト を 取 得 できます。<br />
armasm --cpu list<br />
3.1.6 FPU 名<br />
<strong>ARM</strong> アセンブラには、 FPU 名 を 指 定 するためのオプシ ョ ンがあ り ます。<br />
--fpu name<br />
ターゲッ ト の 浮 動 小 数 点 ユニ ッ ト (FPU) アーキテクチャを 選 択<br />
します。 このオプションを 指 定 すると、--cpu オプシ ョ ンによ って<br />
設 定 さ れた 任 意 の 暗 示 的 FPU がオーバラ イ ド されます。 明 示 的 に<br />
指 定 し た FPU に CPU と の 互 換 性 がない 場 合 、 エ ラーが 生 成 さ れ<br />
ます。 浮 動 小 数 点 命 令 が 間 違 った ターゲ ッ ト FPU にアセンブルさ<br />
れた と きにも、 エ ラーまたは 警 告 が 表 示 される 場 合 があ り ます。<br />
アセンブラによって、 オブジェ ク ト ファ イル 内 の name に 対 応 す<br />
るビルド 属 性 が 設 定 されます。 オブジ ェ ク ト フ ァ イル 間 の 互 換 性<br />
と 、 選 択 さ れる ラ イ ブ ラ リ は リ ン カに よ って 決 定 さ れます。<br />
name の 有 効 値 は 以 下 の とお り です。<br />
none 浮 動 小 数 点 アーキテ ク チャ を 選 択 し ません。 これによ り、<br />
アセンブルされたオブジェ ク ト ファ イルと 任 意 の FPU で<br />
ビル ド さ れたオブジ ェ ク ト フ ァ イル と の 互 換 性 を 確 保 で き<br />
ます。<br />
vfpv3<br />
アーキテクチャ VFPv3 に 適 合 する、 ハー ド ウ ェ アのベ ク<br />
タ 浮 動 小 数 点 ユニ ッ ト を 選 択 し ます。<br />
3-14 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
vfpv3_fp16<br />
vfpv3_d16<br />
vfpv3_d16_fp16<br />
vfpv2<br />
softvfp<br />
softvfp+vfpv2<br />
softvfp+vfpv3<br />
半 精 度 浮 動 小 数 点 拡 張 を 備 えたアーキテ ク チャ VFPv3 に<br />
適 合 する、 ハー ド ウ ェ アのベ ク タ 浮 動 小 数 点 ユニ ッ ト を 選<br />
択 します。<br />
アーキテ クチャ VFPv3-D16 に 適 合 する、 ハー ド ウ ェ アの<br />
ベ ク タ 浮 動 小 数 点 ユニ ッ ト を 選 択 し ます。<br />
半 精 度 浮 動 小 数 点 拡 張 を 備 えたアーキテ ク チャ VFPv3-D16<br />
に 適 合 する、 ハー ド ウ ェ アのベク タ 浮 動 小 数 点 ユニ ッ ト を<br />
選 択 し ます。<br />
アーキテ クチャ VFPv2 に 適 合 する、 ハード ウ ェアのベク<br />
タ 浮 動 小 数 点 ユニ ッ ト を 選 択 し ます。<br />
ソ フ ト ウ ェ ア 浮 動 小 数 点 リ ンケージを 選 択 し ます。 --fpu オ<br />
プシ ョ ン を 指 定 せず、 選 択 さ れた --cpu オプシ ョ ンで 特 定<br />
の FPU を 示 唆 していない 場 合 は、 これがデフォル ト にな<br />
ります。<br />
VFP 命 令 を 使 用 する ソ フ ト ウ ェ ア 浮 動 小 数 点 リ ン ケージが<br />
あ る 浮 動 小 数 点 ラ イ ブ ラ リ を 選 択 し ます。<br />
それ 以 外 の 点 は、--fpu vfpv2 を 使 用 する 場 合 と 同 等 です。<br />
VFP 命 令 を 使 用 する ソ フ ト ウ ェ ア 浮 動 小 数 点 リ ン ケージが<br />
あ る 浮 動 小 数 点 ラ イ ブ ラ リ を 選 択 し ます。<br />
それ 以 外 の 点 は、--fpu vfpv3 を 使 用 する 場 合 と 同 等 です。<br />
softvfp+vfpv3_fp16 VFP 命 令 を 使 用 する ソ フ ト ウ ェ ア 浮 動 小 数 点 リ ン ケージが<br />
あ る 浮 動 小 数 点 ラ イ ブ ラ リ を 選 択 し ます。<br />
それ 以 外 の 点 は、--fpu vfpv3_fp16 を 使 用 する 場 合 と 同 等 で<br />
す。<br />
softvfp+vfpv3_d16<br />
VFP 命 令 を 使 用 する ソ フ ト ウ ェ ア 浮 動 小 数 点 リ ン ケージが<br />
あ る 浮 動 小 数 点 ラ イ ブ ラ リ を 選 択 し ます。<br />
それ 以 外 の 点 は、--fpu vfpv3_d16 を 使 用 する 場 合 と 同 等 で<br />
す。<br />
softvfp+vfpv3_d16_fp16<br />
VFP 命 令 を 使 用 する ソ フ ト ウ ェ ア 浮 動 小 数 点 リ ン ケージが<br />
あ る 浮 動 小 数 点 ラ イ ブ ラ リ を 選 択 し ます。<br />
それ 以 外 の 点 は、--fpu vfpv3_d16_fp16 を 使 用 する 場 合 と 同<br />
等 です。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-15<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
リ ン ク 時 のソ フ ト ウ ェ ア ラ イブラ リ の 選 択 に 対 する これらの 値 の 影 響 につい<br />
ては、 『リンカユーザガイド』 を 参 照 して 下 さい。<br />
有 効 な FPU 名 の リ ス ト を 取 得 する<br />
次 のコマン ド を 使 用 してアセンブラ を 起 動 する と、 有 効 な FPU 名 の リ ス ト を<br />
取 得 で き ます。<br />
armasm --fpu list<br />
3.1.7 メモリアクセス 属 性<br />
ターゲ ッ ト メ モ リ シ ス テムの メ モ リ ア ク セス 属 性 を 指 定 する には、 次 の コ マ<br />
ンドを 使 用 します。<br />
--memaccess attributes<br />
デフォル ト は、 バイ ト 、 ハーフワード、 ワードの 境 界 整 列 ロードおよびス ト<br />
アの 有 効 化 です。 デフ ォル ト を 変 更 する には、 attributes を 指 定 し ます。 以 下<br />
のいずれかの 値 を 設 定 でき ます。<br />
+L41 非 境 界 整 列 LDR を 有 効 にし ます。<br />
-L22 ハーフ ワー ド ロー ド を 有 効 に し ません。<br />
-S22 ハーフ ワー ド ス ト アを 有 効 に し ません。<br />
-L22-S22<br />
ハーフ ワー ド ロー ド およびス ト アを 有 効 に し ません。<br />
注<br />
----memaccess オプシ ョ ンは 使 用 が 制 限 されています。<br />
3.1.8 SET デ ィ レ ク テ ィ ブ を 事 前 に 実 行 する<br />
次 のオプシ ョ ンを 使 用 する と、 いずれかの SET デ ィ レ ク テ ィ ブを 事 前 実 行 す<br />
るようにアセンブラに 指 示 できます。<br />
--predefine "directive"<br />
directive は 二 重 引 用 符 で 囲 む 必 要 があ り ます。 詳 細 については、 「SETA、<br />
SETL、 SETS」 (ページ 7-8) を 参 照 して 下 さい。 また、 アセンブラは、 変 数 の<br />
値 を 設 定 する 前 に、 対 応 する GBLL、 GBLS、 または GBLA ディレクティブを 実 行<br />
して 変 数 を 定 義 します。<br />
変 数 名 では、 大 文 字 と 小 文 字 が 区 別 さ れます。<br />
3-16 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
注<br />
使 用 し てい る シ ス テムの コ マン ド ラ イ ン イ ン タ フ ェースに よ っては、 \” など、<br />
特 殊 文 字 を 組 み 合 わせた も のを 入 力 し て、 directive に 文 字 列 を 含 め る 必 要 が<br />
あります。 あるいは、--via file を 使 用 して --predefine 引 数 を 含 める こ と もで<br />
きます。 コマンド ラインインタフェースでは --via ファイルからの 引 数 を 変 更<br />
するこ とはできません。<br />
3.1.9 長 い LDM と STM を 分 割 する<br />
多 数 のレ ジ ス タ が 含 まれてい る LDM および STM 命 令 をエ ラーにする よ う にアセ<br />
ンブラに 指 示 するには、 次 のオプシ ョ ンを 使 用 します。<br />
--split_ldm<br />
こ のオプシ ョ ン を 指 定 する と 、 転 送 さ れた レ ジ ス タ の 最 大 数 が 次 の 数 を 超 え<br />
た 場 合 、 LDM および STM 命 令 はエ ラーにな り ます。<br />
• 5 つ (すべての STM 命 令 の 場 合 と PC をロードしない LDM 命 令 の 場 合 )<br />
• 4 つ (PC をロードする LDM 命 令 の 場 合 )<br />
多 数 レ ジ ス タ の 転 送 を 回 避 する と 、 次 の よ う な <strong>ARM</strong> システムに 対 する 割 り<br />
込 み 遅 延 を 減 らすこ と がで き ます。<br />
• キャッシュや 書 き 込 みバッファのない <strong>ARM</strong> システム (キャッシュレス<br />
<strong>ARM</strong>7TDMI など)<br />
• ゼロウェイ ト 状 態 モード、 32 ビ ッ ト メ モ リ を 使 用 する <strong>ARM</strong> システム<br />
ま た、 多 数 レ ジ ス タ の 転 送 を 回 避 する と 、 次 の 影 響 があ り ます。<br />
• コードサイズが 増 えます。<br />
• キャ ッシュ 付 きシステムや、 書 き 込 みバッファ 付 きプロセッサには 大 き<br />
なメ リッ トはありません。<br />
• ゼロ ウ ェ イ ト 状 態 メモ リ を 使 用 していないシステムや、 低 速 なペ リ フェ<br />
ラルデバイスのあるシステムについてメ リ ッ トはあり ません。 このよ う<br />
なシステムの 割 り 込 みレイテンシは、 最 も 速 度 の 遅 いメモリ またはペリ<br />
フ ェ ラルデバイ スへのア ク セスに 必 要 なサイ クル 数 によ って 決 ま り ま<br />
す。 こ の 割 り 込 みレ イ テンシは 通 常 、 複 数 レ ジ ス タ の 転 送 に よ って 誘 発<br />
されるレイテンシよ り も 大 き くなり ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-17<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
3.1.10 リストをファイルに 出 力 する<br />
リ ス ト を フ ァ イルに 出 力 する には、 次 のオプシ ョ ン を 使 用 し ます。<br />
--list file<br />
このオプションは、 アセンブラによって 生 成 されたアセンブリ 言 語 の 詳 細 な<br />
リストを file に 出 力 する よ う にアセンブ ラ に 指 示 し ます。<br />
file として - を 指 定 する と 、 リ ス ト が stdout に 送 られます。<br />
file が 指 定 されていない 場 合 は、--list= を 使 用 して、 出 力 を inputfile.lst に<br />
送 信 し ます。<br />
注<br />
ファイル 名 なしで --list を 使 用 する と、 出 力 を inputfile.lst に 送 信 でき ます。<br />
ただ し、 こ の 構 文 は 現 在 使 用 が 制 限 さ れてい る ため、 こ の 構 文 を 使 用 する と<br />
アセンブラによって 警 告 メ ッセージが 表 示 されます。 こ の 構 文 は 今 後 の リ<br />
リースで 廃 止 される 予 定 です。 代 わ り に、--list= を 使 用 して 下 さい。<br />
--list の 動 作 を 制 御 するには、 次 のコマン ド ラ インオプシ ョ ンを 使 用 します。<br />
--no_terse<br />
--width<br />
terse フラグをオフにします。 このオプションをオンにすると、<br />
条 件 アセンブ リ に よ り ス キ ッ プ さ れた 行 は リ ス ト には 表 示 さ れ<br />
ません。 terse オプションをオフにすると、 これらの 行 がリスト<br />
に 表 示 されます。 デフォル ト はオンです。<br />
リストするページの 幅 を 設 定 します。 デフォル ト は 79 文 字 です。<br />
--length リストするページの 長 さを 設 定 します。 ゼロを 指 定 した 場 合 、<br />
ページ 番 号 な し で リ ス ト さ れます。 デフォル ト は 66 行 です。<br />
--xref<br />
マ ク ロ の 内 部 と 外 部 でシンボルが 定 義 さ れてい る 場 所 と 使 用 さ<br />
れてい る 場 所 などの 相 互 参 照 情 報 を リ ス ト する よ う にアセンブ<br />
ラが 設 定 されます。 デフォル ト はオフです。<br />
3-18 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
3.1.11 プロジェク トテンプレートオプション<br />
プロジェク トテンプレートは、 特 定 の 設 定 のコマンド ラインオプショ ンなど<br />
のプロジェ ク ト 情 報 が 含 まれている フ ァ イルです。 これらのファイルは、 プ<br />
ロジェク トテンプレートの 作 業 ディレク ト リに 保 存 されています。 以 下 のオ<br />
プシ ョ ンは、 プ ロ ジ ェ ク ト テンプレー ト の 使 用 を 制 御 し ます。<br />
--[no_]project=filename<br />
--reinitialize_workdir<br />
--workdir=directory<br />
プロジェ ク ト テンプレー ト フ ァ イルの 使 用 を 許 可 するかど う か<br />
を 指 定 できます。<br />
プ ロ ジ ェ ク ト テンプレー ト の 作 業 デ ィ レ ク ト リ を 再 初 期 化 する<br />
かど うかを 指 定 できます。<br />
プ ロ ジ ェ ク ト テンプレー ト の 作 業 デ ィ レ ク ト リ を 指 定 で き ます。<br />
以 下 の 各 オプシ ョ ンの 詳 細 については、 『コンパイ ラ リ ファレンスガイ ド』 を<br />
参 照 し て 下 さ い。<br />
• 「--project=filename, --no_project=filename」 (ページ 2-120)<br />
• 「--reinitialize_workdir」 (ページ 2-123)<br />
• 「--workdir=directory」 (ページ 2-153)<br />
3.1.12 診 断 メ ッ セージの 出 力 の 制 御<br />
診 断 メ ッ セージの 出 力 を 制 御 する ためのオプシ ョ ンがい く つかあ り ます。<br />
--brief_diagnostics<br />
簡 単 な 診 断 出 力 形 式 を 使 用 する モー ド を 有 効 ま たは 無 効 に し ま<br />
す。 有 効 にする と 、 元 の ソース 行 は 表 示 さ れず、 1 行 に 収 ま ら な<br />
いエラーメ ッセージは 折 り 返 されません。 デフォル ト は<br />
--no_brief_diagnostics です。<br />
--diag_style {arm|ide|gnu}<br />
診 断 メ ッ セージを 表 示 する ための 形 式 を 指 定 し ます。<br />
arm<br />
ide<br />
<strong>ARM</strong> アセンブラの 形 式 を 使 用 してメ ッセージを 表 示 し<br />
ます。 --diag_style が 指 定 されていない 場 合 は、 これが<br />
デフォル ト にな り ます。<br />
エラーのあ る 行 の 行 番 号 と 文 字 数 を 表 示 し ます。 これ<br />
ら の 値 は 括 弧 に 囲 まれて 表 示 さ れます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-19<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
--diag_error tag{,tag,…}<br />
gnu GNU 形 式 で メ ッ セージを 表 示 し ます。<br />
オプシ ョ ン --diag_style=ide を 選 択 する と 、 オプシ ョ ン<br />
--brief_diagnostics が 暗 黙 的 に 選 択 さ れます。 コマンド ラインで<br />
--no_brief_diagnostics を 明 確 に 選 択 する と、 --diag_style=ide に<br />
よって 暗 示 される --brief_diagnostics の 選 択 は 無 効 にな り ます。<br />
オプシ ョ ン --diag_style=arm またはオプショ ン --diag_style=gnu の<br />
いずれかを 選 択 し て も、 --brief_diagnostics を 選 択 したこ とには<br />
なりません。<br />
--diag_remark tag{,tag,…}<br />
指 定 さ れた タ グ を 持 つ 診 断 メ ッ セージにエ ラーの 重 大 度 を 設 定<br />
します ( 表 3-1 (ページ 3-21) を 参 照 )。<br />
指 定 さ れた タ グ を 持 つ 診 断 メ ッ セージに 注 釈 の 重 大 度 を 設 定 し<br />
ます ( 表 3-1 (ページ 3-21) を 参 照 )。<br />
--diag_warning tag{,tag,…}<br />
指 定 さ れた タ グ を 持 つ 診 断 メ ッ セージに 警 告 の 重 大 度 を 設 定 し<br />
ます ( 表 3-1 (ページ 3-21) を 参 照 )。<br />
--diag_suppress tag{,tag,…}<br />
指 定 さ れた タ グ を 持 つすべての 診 断 メ ッ セージを 無 効 に し ます。<br />
--unsafe<br />
さまざまなアーキテクチャからの 命 令 をエラーなしでアセンブ<br />
ルします。 対 応 する エ ラー メ ッ セージは 警 告 メ ッ セージに 変 更 さ<br />
れます。 演 算 子 の 優 先 順 位 に 関 する 警 告 も 非 表 示 に さ れます (「2<br />
項 演 算 子 」 (ページ 3-43) を 参 照 )。<br />
以 上 の --diag_ オプシ ョ ンの う ち、 4 つに、 非 表 示 にする メ ッ セージの 番 号 を<br />
表 す tag を 指 定 する 必 要 があ り ます。 こ の 場 合 、 複 数 のタ グを 指 定 でき ます。<br />
例 えば、 番 号 1293 と 187 の 警 告 メ ッ セージを 非 表 示 にするには、 以 下 のコマ<br />
ンドを 使 用 します。<br />
armasm --diag_suppress 1293,187 ...<br />
--diag_error、--diag_remark、 および --diag_warning を 指 定 した り、 メ ッセージ<br />
を 非 表 示 に し た り する 場 合 は、 次 の よ う に し てアセンブ ラ 接 頭 文 字 A を 使 用<br />
できます。<br />
armasm --diag_suppress A1293,A187 ...<br />
3-20 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
診 断 メ ッ セージは 切 り 取 り 、 コ マン ド ラ イ ンに 直 接 貼 り 付 け る こ と がで き ま<br />
す。 接 頭 文 字 の 使 用 は 省 略 で き ます。 ただ し、 接 頭 文 字 を 含 め る 場 合 は、<br />
armasm 識 別 文 字 と 一 致 する 必 要 があ り ます。 別 の 接 頭 文 字 が 見 つか る と 、 アセ<br />
ンブラはそのメ ッセージ 番 号 を 無 視 します。<br />
表 3-1 で、 オプシ ョ ンの 説 明 で 使 用 される 重 大 度 という 用 語 のそれぞれの 意<br />
味 を 説 明 します。<br />
表 3-1 診 断 メ ッ セージの 重 大 度<br />
重 大 度<br />
致 命 的 エラー<br />
エ ラー<br />
警 告<br />
注 釈<br />
説 明<br />
アセンブリ を 停 止 しなければならないよ うな 問 題 を 示 します。<br />
これらのエラーには、 コマン ド ラ イ ンエラー、 内 部 エラー、 イ<br />
ン ク ルー ド フ ァ イルの 欠 落 な どがあ り ます。<br />
アセンブ リ 言 語 の 構 文 ルールま たはセマンテ ィ ッ ク ルールの 違<br />
反 を 示 し ます。 アセンブリは 引 き 続 き 実 行 されますが、 オブ<br />
ジェク ト コードは 生 成 されません。<br />
コー ド に 問 題 を 引 き 起 こ す 可 能 性 のあ る 例 外 的 な 状 況 を 示 す 警<br />
告 です。 重 大 度 のエ ラーが 検 出 さ れない 限 り 、 アセンブ ラ は 引<br />
き 続 き 実 行 され、 オブジェク ト コードが 生 成 されます。<br />
一 般 的 であ る が、 推 奨 さ れないアセンブ リ 言 語 の 慣 用 を 示 し ま<br />
す。 これらの 診 断 情 報 はデフ ォル ト では 表 示 さ れません。 重 大 度<br />
のエラーが 検 出 されない 限 り、 アセンブラは 引 き 続 き 実 行 され、<br />
オブジ ェ ク ト コー ド が 生 成 さ れます。<br />
3.1.13 例 外 テーブル 生 成 を 制 御 する<br />
例 外 テーブル 生 成 を 制 御 する オプシ ョ ンには 以 下 の 4 つがあ り ます。<br />
--exceptions 遭 遇 し たすべての 関 数 について、 例 外 テーブル 生 成 をオンにす<br />
るようにアセンブラに 指 示 します。<br />
--no_exceptions<br />
--exceptions_unwind<br />
例 外 テーブル 生 成 をオフにする よ う にアセンブ ラ に 指 示 し ます。<br />
テーブルは 生 成 されません。 これがデフォルトです。<br />
可 能 な 場 合 は、 関 数 について unwind テーブルを 生 成 する よ う に<br />
アセンブ ラ に 指 示 し ます。 これがデフォルトです。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-21<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
--no_exceptions_unwind<br />
すべての 関 数 について nounwind テーブルを 生 成 する よ う にアセ<br />
ンブ ラ に 指 示 し ます。<br />
さ ら に 細 か く 制 御 する には、 FRAME UNWIND ON および FRAME UNWIND OFF ディレク<br />
テ ィ ブを 使 用 し ます。 詳 細 については、 「FRAME UNWIND ON」 (ページ<br />
7-61) と 「FRAME UNWIND OFF」 (ページ 7-61) を 参 照 して 下 さい。<br />
Unwind テーブル<br />
関 数 は、 PROC/ENDP または FUNC/ENDFUNC ディレクティブで 囲 まれたコードです。<br />
例 外 は、 unwind テーブルを 持 つ 関 数 内 を 伝 播 で き ます。 アセンブラは、 デ<br />
バ ッ グ フ レーム 情 報 か ら アン ワ イ ン ド 情 報 を 生 成 し ます。<br />
例 外 は、 nounwind テーブルを 持 つ 関 数 内 を 伝 播 できません。 例 外 処 理 時 に<br />
nounwind テーブルに 遭 遇 し た 場 合 、 例 外 処 理 ラ イ ン タ イ ム 環 境 に よ ってプ ロ<br />
グ ラ ムが 終 了 し ます。<br />
アセンブ ラ では、 すべての 関 数 および 非 関 数 について nounwind テーブルエン<br />
トリを 生 成 できます。 関 数 内 部 でス タ ッ ク の 使 用 を 記 述 する 十 分 な FRAME ディ<br />
レ ク テ ィ ブが 関 数 に 含 まれている 場 合 にのみ、 その 関 数 の unwind テーブルを<br />
アセンブ ラ で 生 成 で き ます。 関 数 は、 「Exception Handling ABI for the <strong>ARM</strong><br />
Architecture」 (EHABI)、 セ ク シ ョ ン 9.1 「Constraints on Use」 で 規 定 されてい<br />
る 条 件 に 準 拠 する 必 要 があ り ます。 アセンブラが unwind テーブルを 生 成 でき<br />
ない 場 合 、 nounwind テーブルを 生 成 し ます。<br />
3-22 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
3.2 ソース 行 の 形 式<br />
以 下 は、 <strong>ARM</strong> アセンブ リ 言 語 モジ ュールで 記 述 する ソース 行 の 汎 用 形 式 で<br />
す。<br />
{symbol} {instruction|directive|pseudo-instruction} {;comment}<br />
このソース 行 の 3 つのセ ク シ ョ ンはすべてオプシ ョ ンです。<br />
冒 頭 か ら い き な り 命 令 を 開 始 する こ と はで き ません。 命 令 の 前 にシンボルが<br />
ない 場 合 で も、 命 令 の 先 頭 に 空 白 を 空 ける 必 要 があ り ます。<br />
命 令 、 疑 似 命 令 、 デ ィ レ ク テ ィ ブは、 本 書 に 記 載 し てい る よ う にすべて 大 文<br />
字 で 記 述 し た り 、 すべて 小 文 字 で 記 述 し た り で き ます。 大 文 字 と 小 文 字 を 混 在<br />
させて 命 令 、 疑 似 命 令 、 ま たはデ ィ レ ク テ ィ ブを 記 述 する こ と はで き ません。<br />
コー ド を 読 みやす く する ために 空 白 行 を 使 用 する こ と も で き ます。<br />
symbol には 通 常 、 ラベルを 指 定 し ます (「ラベル」 (ページ 3-32) および<br />
「ローカルラベル」 (ページ 3-33) を 参 照 )。 命 令 および 疑 似 命 令 内 では こ れが<br />
必 ずラベルです。 一 部 のデ ィ レ ク テ ィ ブでは、 こ れが 変 数 ま たは 定 数 のシン<br />
ボルです。 詳 細 については、 デ ィ レ ク テ ィ ブの 説 明 を 参 照 し て 下 さ い。<br />
symbol は 必 ず 最 初 の 列 か ら 開 始 する 必 要 があ り ます。 スペースやタ ブなどの<br />
空 白 文 字 を 含 め る こ と はで き ません (「シンボルの 命 名 ルール」 (ページ<br />
3-29) を 参 照 )。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-23<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
3.3 定 義 済 みのレジス タ およびコ プ ロセ ッ サ 名<br />
すべてのレ ジ ス タおよびコ プ ロ セ ッ サ 名 では、 大 文 字 と 小 文 字 が 区 別 さ れま<br />
す。<br />
3.3.1 事 前 宣 言 されている レジス タ 名<br />
以 下 のレ ジ ス タ 名 は 事 前 宣 言 さ れています。<br />
• r0-r15 および R0-R15<br />
• a1-a4 ( 引 数 、 結 果 、 ス ク ラ ッ チレ ジ ス タ、 r0 ~ r3 の 同 義 語 )<br />
• v1-v8 ( 変 数 レ ジ ス タ、 r4 ~ r11)<br />
• sb および SB (スタテ ィ ッ クベース、 r9)<br />
• ip および IP ( 内 部 プ ロ シージ ャ コールス ク ラ ッ チレ ジ ス タ、 r12)<br />
• sp および SP (スタ ッ クポインタ、 r13)<br />
• lr および LR (リンクレジスタ、 r14)<br />
• pc および PC (プロ グ ラ ムカ ウ ン タ、 r15)<br />
3.3.2 事 前 宣 言 されている 拡 張 レジス タ 名<br />
以 下 の 拡 張 レ ジ ス タ 名 は 事 前 宣 言 さ れています。<br />
• q0-q15 および Q0-Q15 (NEON クワッドワードレジスタ)<br />
• d0-d31 および D0-D31 (NEON ダウンロードレジスタ、 VFP ダブルプレシ<br />
ジョンレジスタ)<br />
• s0-s31 および S0-S31 (VFP 単 精 度 レ ジ ス タ)。<br />
3-24 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
3.3.3 事 前 宣 言 されている XScale レジスタ 名<br />
以 下 のレ ジ ス タ 名 は、 Intel XScale CPU 向 けにアセンブルする 際 に 事 前 宣 言 さ<br />
れています。<br />
• acc0-acc7 および ACC0-ACC7 (XScale アキュムレータ)。<br />
以 下 のレ ジ ス タ 名 、 ワ イ ヤレ ス MMX 付 き Intel XScale CPU 向 けにアセンブル<br />
する 際 に 事 前 宣 言 さ れています。<br />
• wR0-wR15、 wr0-wr15、 および WR0-WR15<br />
• wC0-wC15、 wc0-wc15、 および WC0-WC15<br />
• wCID、 wcid、 および WCID<br />
• wCon、 wcon、 および WCON<br />
• wCSSF、 wcssf、 および WCSSF<br />
• wCASF、 wcasf、 および WCASF。<br />
3.3.4 事 前 宣 言 されている コ プロセ ッ サ 名<br />
以 下 の コ プ ロ セ ッ サ 名 およびコ プ ロ セ ッ サレ ジ ス タ 名 は 事 前 宣 言 さ れていま<br />
す。<br />
• p0-p15 (コプロセッサ 0 ~ 15)<br />
• c0-c15 (コプロセッサレジスタ 0 ~ 15)<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-25<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
3.4 組 み 込 み 変 数 および 定 数<br />
表 3-2 に、 <strong>ARM</strong> アセンブ ラ に よ って 定 義 さ れてい る 組 み 込 み 変 数 を 記 載 し ま<br />
す。<br />
表 3-2 組 み 込 み 変 数<br />
{ARCHITECTURE}<br />
{AREANAME}<br />
{<strong>ARM</strong>ASM_VERSION}<br />
|ads$version|<br />
{CODESIZE}<br />
{COMMANDLINE}<br />
{CONFIG}<br />
{CPU}<br />
{ENDIAN}<br />
{FPIC}<br />
{FPU}<br />
{INPUTFILE}<br />
{INTER}<br />
{LINENUM}<br />
{OPT}<br />
選 択 さ れた <strong>ARM</strong> アーキテ ク チャの 名 前 を 保 持 し ます。<br />
現 在 の AREA の 名 前 を 保 持 し ます。<br />
armasm のバージ ョ ン ご と に 増 加 する 整 数 を 保 持 し ます。<br />
{<strong>ARM</strong>ASM_VERSION} と 同 じ 値 を 保 持 します。<br />
{CONFIG} と 同 じ 意 味 です。<br />
コ マン ド ラ イ ンの 内 容 を 保 持 し ます。<br />
アセンブラが <strong>ARM</strong> コードをアセンブルしている 場 合 は、 値 32 を 保 持 し、 Thumb コード<br />
をアセンブルしている 場 合 は 値 16 を 保 持 し ます。<br />
選 択 さ れてい る cpu の 名 前 を 保 持 し ます。 デフォル ト は “<strong>ARM</strong>7TDMI” です。 アーキテクチャ<br />
がコマンド ラインの --cpu オプシ ョ ンで 指 定 さ れてい る 場 合 、 {CPU} は、 値 "Generic <strong>ARM</strong>"<br />
を 保 持 します。<br />
アセンブラがビッグエンディアンモードの 場 合 は 値 “big” を 保 持 し、 リ ト ルエンディ ア<br />
ンモードの 場 合 は “little” を 保 持 します。<br />
/fpic が 設 定 さ れてい る 場 合 はブール 値 True を 保 持 します。 デフォル ト は False です。<br />
選 択 さ れてい る fpu の 名 前 を 保 持 し ます。 デフォル ト は “SoftVFP” です。<br />
現 在 の ソース フ ァ イルの 名 前 を 保 持 し ます。<br />
/inter が 設 定 さ れてい る 場 合 はブール 値 True を 保 持 し ます。 デフォル ト は False です。<br />
現 在 の ソース フ ァ イル 内 の 行 番 号 を 示 す 整 数 を 保 持 し ます。<br />
現 在 設 定 さ れてい る リ ス ト オプシ ョ ンの 値 。 OPT デ ィ レ ク テ ィ ブを 使 用 する と 、 現 在 の リ<br />
ス ト オプシ ョ ンを 保 存 した り、 リ ス ト オプシ ョ ンを 変 更 した り、 元 の 値 を 復 元 した り で<br />
きます。<br />
{PC} または . 現 在 の 命 令 のア ド レ ス。<br />
{PCSTOREOFFSET}<br />
STR pc,[...] 命 令 ま たは STM Rb,{..., pc} 命 令 のア ド レ ス と 、 ス ト ア さ れた pc 値 の 間 のオ<br />
フセッ ト です。 " この 変 数 に 保 持 される 値 は、 指 定 された CPU またはアーキテクチャに<br />
よって 変 わります。<br />
3-26 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
表 3-2 組 み 込 み 変 数 ( 続 き)<br />
{ROPI}<br />
{RWPI}<br />
/ropi が 設 定 さ れてい る 場 合 はブール 値 True を 保 持 し ます。 デフォル ト は False です。<br />
/rwpi が 設 定 さ れてい る 場 合 はブール 値 True を 保 持 し ます。 デフォル ト は False です。<br />
{VAR} または @ ス ト レージ 領 域 の 位 置 カ ウ ン タの 現 在 の 値 。<br />
SETA、 SETL、 または SETS デ ィ レ ク テ ィ ブを 使 用 し て 組 み 込 み 変 数 を 設 定 する こ<br />
とはできません。 組 み 込 み 変 数 は、 次 の よ う に 数 式 や 条 件 式 で 使 用 で き ます。<br />
IF {ARCHITECTURE} = "4T"<br />
組 み 込 み 変 数 |ads$version| はすべて 小 文 字 にする 必 要 があ り ます。 その 他 の<br />
組 み 込 み 変 数 の 名 前 には 大 文 字 のみ、 小 文 字 のみ、 ま たは 大 文 字 と 小 文 字 を<br />
使 用 で き ます。 例 :<br />
IF {CpU} = "Generic <strong>ARM</strong>"<br />
注<br />
組 み 込 み 変 数 が 文 字 列 の 場 合 にはいずれ も、 大 文 字 と 小 文 字 を 区 別 し た 値 が<br />
格 納 さ れます。 {CPU} と {ARCHITECTURE} の 有 効 値 については、 「CPU 名 」 (ペー<br />
ジ 3-13) を 参 照 して 下 さい。 {FPU} の 有 効 値 については、 「FPU 名 」 (ページ<br />
3-14) を 参 照 して 下 さい。 こ れら の 組 み 込 み 変 数 に 関 する 関 係 演 算 は、 大 文 字<br />
小 文 字 の 区 別 が 間 違 ってい る 文 字 列 には 一 致 し ません。<br />
表 3-3 に、 <strong>ARM</strong> アセンブ ラ で 定 義 さ れてい る 組 み 込 みブール 定 数 を 記 載 し ま<br />
す。<br />
表 3-3 組 み 込 みブール 定 数<br />
{FALSE}<br />
{TRUE}<br />
論 理 定 数 False<br />
論 理 定 数 True<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-27<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
3.4.1 armasm のバージ ョ ンの 検 出<br />
組 み 込 み 変 数 {<strong>ARM</strong>ASM_VERSION} を 使 用 する と 、 armasm のバージ ョ ンを 区 別 でき<br />
ます。 バージ ョ ン 番 号 の 形 式 は PVtbbb です。 各 項 目 には 以 下 の 意 味 があ り ま<br />
す。<br />
P<br />
メジャーバージョンを 示 します。<br />
V<br />
マイナーバージョンを 示 します。<br />
t<br />
パッチリ リースを 示 します。<br />
bbb ビルド 番 号 を 示 し ます。<br />
ADS と RVCT 以 前 は、 <strong>ARM</strong> アセンブ ラ には、 組 み 込 み 変 数 |ads$version| が<br />
用 意 さ れていませんで し た。 古 い 開 発 ツールを 使 用 し て コー ド のバージ ョ ン<br />
を 設 定 する 場 合 は、 組 み 込 み 変 数 |ads$version| を 使 用 してテス ト を 実 施 でき<br />
ます。 次 のコード を 使 用 し ます。<br />
IF :DEF: |ads$version|<br />
; code for <strong>RealView</strong> or ADS<br />
ELSE<br />
; code for SDT<br />
ENDIF<br />
3-28 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
3.5 シンボル<br />
シンボルを 使 用 し て、 変 数 、 ア ド レ ス、 数 値 定 数 を 表 現 で き ます。 アドレス<br />
を 表 すシンボルはラベルと も 呼 ばれます。 詳 細 については、 以 下 を 参 照 し て<br />
下 さい。<br />
• 「シンボルの 命 名 ルール」<br />
• 「 変 数 」 (ページ 3-30)<br />
• 「 数 値 定 数 」 (ページ 3-30)<br />
• 「アセンブ リ 時 の 変 数 代 入 」 (ページ 3-31)<br />
• 「ラベル」 (ページ 3-32)<br />
• 「ローカルラベル」 (ページ 3-33)<br />
3.5.1 シンボルの 命 名 ルール<br />
シンボル 名 には、 以 下 の 一 般 規 則 が 適 用 されます。<br />
• シンボル 名 は、 その 有 効 範 囲 内 で 唯 一 であ る 必 要 があ り ます。<br />
• シンボル 名 には 大 文 字 、 小 文 字 、 数 値 、 アンダース コ ア 文 字 を 使 用 で き<br />
ます。 シンボル 名 は 大 文 字 と 小 文 字 が 区 別 さ れ、 シンボル 名 に 使 用 する<br />
文 字 はすべて 有 意 です。<br />
• ローカル ラベルを 除 き、 シンボル 名 の 最 初 の 文 字 に 数 値 を 使 用 し ないで<br />
下 さい (「ローカルラベル」 (ページ 3-33) を 参 照 )。<br />
• 組 み 込 み 変 数 名 ま たは 定 義 済 みのシンボル 名 と 同 じ 名 前 のシンボルを 使<br />
用 する こ と はで き ません (「 定 義 済 みのレ ジ ス タおよびコ プ ロ セ ッ サ 名 」<br />
(ページ 3-24) および「 組 み 込 み 変 数 および 定 数 」 (ページ 3-26) を 参<br />
照 )。<br />
• 命 令 ニーモニ ッ ク ま たはデ ィ レ ク テ ィ ブ と 同 じ 名 前 を 使 用 する 場 合 は、<br />
複 縦 線 を 使 用 し てシンボル 名 を 区 切 って 下 さ い。 例 :<br />
||ASSERT||<br />
縦 線 はシンボル 名 と し て 解 釈 さ れる こ と はあ り ません。<br />
• プログラムラベルとしてシンボル |$a|, |$t|, |$t.x| または |$d| は 使 用 で<br />
きません。 これらは、 <strong>ARM</strong>、 Thumb、 ThumbEE、 およびオブジェクト<br />
フ ァ イル 内 のデータ のマー ク に 使 用 する マ ッ ピ ングシンボルです。<br />
コンパイラを 操 作 するときなど、 通 常 はシンボル 名 として 使 用 できない 文 字<br />
を 使 用 する 場 合 は、 単 縦 線 を 使 用 してシンボル 名 を 区 切 り ます。 例 :<br />
|.text|<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-29<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
縦 線 はシンボル 名 と し て 解 釈 さ れる こ と はあ り ません。 縦 線 内 部 で さ ら に 縦<br />
線 、 セ ミ コ ロ ン、 改 行 を 使 用 する こ と はで き ません。<br />
3.5.2 変 数<br />
変 数 の 値 は、 アセンブ リ の 実 行 中 に 変 更 で き ます。 変 数 には 以 下 の 3 つの 型 が<br />
あります。<br />
• 数 値<br />
• 論 理<br />
• 文 字 列<br />
変 数 の 型 は 変 更 で き ません。<br />
数 値 変 数 の 値 の 範 囲 は、 数 値 定 数 ま たは 数 値 式 の 値 の 範 囲 と 同 じ です (「 数 値<br />
定 数 」 および 「 数 値 式 」 (ページ 3-36) を 参 照 )。<br />
論 理 変 数 の 値 は、 {TRUE} または {FALSE} です (「 論 理 式 」 (ページ 3-39) を 参<br />
照 )。<br />
文 字 列 変 数 の 値 の 範 囲 は、 文 字 列 式 の 値 の 範 囲 と 同 じ です (「 文 字 列 式 」<br />
(ページ 3-35) を 参 照 )。<br />
変 数 を 表 すシンボルを 宣 言 するには、 GBLA、 GBLL、 GBLS、 LCLA、 LCLL、 および<br />
LCLS デ ィ レ ク テ ィ ブを 使 用 し ます。 こ れら の 変 数 に 値 を 割 り 当 て るには、<br />
SETA、 SETL、 および SETS ディレクティブを 使 用 します。 詳 細 については、 以 下<br />
を 参 照 して 下 さい。<br />
• 「GBLA、 GBLL、 GBLS」 (ページ 7-5)<br />
• 「LCLA、 LCLL、 LCLS」 (ページ 7-7)<br />
• 「SETA、 SETL、 SETS」 (ページ 7-8)<br />
3.5.3 数 値 定 数<br />
数 値 定 数 は 32 ビ ッ ト の 整 数 です。 数 値 定 数 は、 0 ~ 2 32 –1 の 範 囲 の 符 号 な し 数<br />
値 を 使 用 して、 または –2 31 ~ 2 3 –1 の 範 囲 の 符 号 あ り 数 値 を 使 用 し て 設 定 でき<br />
ます。 しかし、 アセンブラは –n と 2 32 –n を 区 別 し ません。 > = な どの 関 係 演 算<br />
子 は、 符 号 な し と し て 解 釈 されます。 その 結 果 、 0 > –1 は {FALSE} として 処 理<br />
されます。<br />
定 数 を 定 義 するには、 EQU ディレクティブを 使 用 します (「EQU」 (ページ<br />
7-90) を 参 照 )。 定 義 後 に 数 値 定 数 の 値 を 変 更 する こ と はで き ません。 数 値 定<br />
数 と バイ ナ リ 演 算 子 を 組 み 合 わせて、 数 値 定 数 式 を 作 成 する こ と がで き ます。<br />
3-30 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
「 数 値 式 」 (ページ 3-36) および 「 数 値 リ テ ラ ル」 (ページ 3-37) も 参 照 して<br />
下 さい。<br />
3.5.4 アセンブ リ 時 の 変 数 代 入<br />
アセンブ リ 言 語 で 記 述 されたコードの 行 全 体 、 またはコード 行 の 一 部 に、 文<br />
字 列 変 数 を 代 入 する こ と がで き ます。 変 数 の 値 が 代 入 さ れる 場 所 に、 $ 接 頭 文<br />
字 を 付 けた 変 数 を 挿 入 し ます。 ド ル 記 号 を 使 用 する と 、 アセンブ ラ は、 行 構<br />
文 をチェ ッ ク する 前 に、 文 字 列 を ソ ース コー ド 行 に 代 入 し ます。<br />
数 値 変 数 や 論 理 変 数 も 代 入 可 能 です。 変 数 の 現 在 の 値 は、 代 入 前 に 16 進 数 文<br />
字 列 に 変 換 さ れます ( 論 理 変 数 の 場 合 は T または F に 変 換 されます)。<br />
次 の 文 字 がシンボル 名 に 使 用 でき る 場 合 は、 変 数 名 の 末 尾 に ド ッ ト を 付 けま<br />
す (「シンボルの 命 名 ルール」 (ページ 3-29) を 参 照 )。 変 数 を 使 用 するには、<br />
変 数 の 内 容 を 設 定 する 必 要 があ り ます。<br />
$ という 文 字 に 値 を 代 入 しないようにするには、$$ と 指 定 します。 これは、 1<br />
つの $ に 変 換 されます。<br />
文 字 列 には、 変 数 と $ 接 頭 文 字 を 一 緒 に 含 め る こ と がで き ます。 代 入 は、 他 の<br />
場 所 と 同 じ よ う に 行 われます。<br />
代 入 が 二 重 引 用 符 内 部 の 縦 線 の 影 響 を 受 けない 場 合 を 除 き、 縦 線 内 で 代 入 は<br />
行 われません。<br />
サンプル<br />
; straightforward substitution<br />
GBLS add4ff<br />
;<br />
add4ff SETS "ADD r4,r4,#0xFF" ; set up add4ff<br />
$add4ff.00<br />
; invoke add4ff<br />
; this produces<br />
ADD r4,r4,#0xFF00<br />
; elaborate substitution<br />
GBLS s1<br />
GBLS s2<br />
GBLS fixup<br />
GBLA count<br />
;<br />
count SETA 14<br />
s1 SETS "a$$b$count" ; s1 now has value a$b0000000E<br />
s2 SETS "abc"<br />
fixup SETS "|xy$s2.z|" ; fixup now has value |xyabcz|<br />
|C$$code| MOV r4,#16 ; but the label here is C$$code<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-31<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
3.5.5 ラベル<br />
ラベルは、 命 令 ま たはデータ の メ モ リ 内 のア ド レ ス を 表 すシンボルです。 ラ<br />
ベルには、 プ ロ グ ラ ム 相 対 ラベル、 レ ジ ス タ 相 対 ラベル、 ま たは 絶 対 ア ド レ<br />
スがあり ます。<br />
プログラム 相 対 ラベル<br />
プログラム 相 対 ラベルは、 PC に 対 し て 数 値 定 数 を 加 算 ま たは 減 算 し た 値 を 表<br />
します。 プ ロ グ ラ ム 相 対 ラベルは、 分 岐 命 令 の ターゲ ッ ト と し て 使 用 する か、<br />
ま たはコー ド セ ク シ ョ ンに 組 み 込 まれてい るデータ の 細 目 にア ク セスする た<br />
めに 使 用 し ます。 プ ロ グ ラ ム 相 対 ラベルは、 命 令 で ラベルを 使 用 する か、 ま<br />
たはいずれかのデータ 定 義 デ ィ レ ク テ ィ ブで ラベルを 使 用 する こ と に よ って<br />
定 義 で き ます。 詳 細 については、 以 下 を 参 照 し て 下 さ い。<br />
• 「DCB」 (ページ 7-26)<br />
• 「DCD、 DCDU」 (ページ 7-27)<br />
• 「DCFD、 DCFDU」 (ページ 7-29)<br />
• 「DCFS、 DCFSU」 (ページ 7-30)<br />
• 「DCI」 (ページ 7-31)<br />
• 「DCQ、 DCQU」 (ページ 7-33)<br />
• 「DCW、 DCWU」 (ページ 7-34)<br />
レジスタ 相 対 ラベル<br />
レジス タ 相 対 ラベルは、 名 前 付 きレジス タに 数 値 定 数 を 加 算 した 値 を 表 し ま<br />
す。 レジスタ 相 対 ラベルは、 データセクシ ョ ン 内 のデータにアクセスするた<br />
めに 頻 繁 に 使 用 さ れます。 レ ジ ス タ 相 対 ラベルは、 記 憶 域 マ ッ プを 使 用 し て<br />
定 義 で き ます。 EQU デ ィ レ ク テ ィ ブを 使 用 する と 、 記 憶 域 マ ッ プで 定 義 さ れて<br />
い る ラベルに 基 づいて 追 加 のレ ジ ス タ 相 対 ラベルを 定 義 で き ます。 詳 細 につ<br />
いては、 以 下 を 参 照 して 下 さい。<br />
• 「MAP」 (ページ 7-21)<br />
• 「SPACE または FILL」 (ページ 7-24)<br />
• 「DCDO」 (ページ 7-28)<br />
• 「EQU」 (ページ 7-90)<br />
絶 対 ア ド レス<br />
絶 対 ア ド レ スは 数 値 定 数 です。 値 の 範 囲 は 0 ~ 2 32 –1 の 整 数 です。 絶 対 ア ド レ<br />
スは、 メモ リ を 直 接 アド レス 指 定 します。<br />
3-32 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
3.5.6 ローカルラベル<br />
ローカルラベルは 範 囲 0 ~ 99 の 数 値 で、 その 後 に 名 前 を 付 ける こ と もでき ま<br />
す。 1 つの 領 域 で 複 数 のローカルラベルに 同 じ 番 号 を 使 用 でき ます。<br />
ローカルラベルは、 以 下 の 方 法 で、 アセンブリ 言 語 モジュールのソース 行 内<br />
で symbol の 代 わ り に 使 用 でき ます (「ソース 行 の 形 式 」 (ページ 3-23) を 参<br />
照 )。<br />
• 命 令 やデ ィ レ ク テ ィ ブ と 一 緒 に 使 用 せずに 単 独 で 使 用 する。<br />
• 命 令 を 含 む 行 の 中 で 使 用 する。<br />
• コー ド 生 成 デ ィ レ ク テ ィ ブま たはデータ 生 成 デ ィ レ ク テ ィ ブを 含 む 行 の<br />
中 で 使 用 する。<br />
プ ロ グ ラ ム 相 対 ラベルを 使 用 する 場 所 では 通 常 、 ローカル ラ ベルが 使 用 さ れ<br />
ます (「ラベル」 (ページ 3-32) を 参 照 )。<br />
ローカル ラベルは 一 般 に、 ルーチン 内 部 のループおよび 条 件 コー ド や、 ロー<br />
カルのみで 使 用 される 小 さいサブルーチンに 対 して 使 用 されます。 ローカル<br />
ラベルは、 特 にマ ク ロで 使 用 する と 便 利 です (「MACRO、 MEND」 (ページ<br />
7-37) を 参 照 )。<br />
ローカル ラベルの 有 効 範 囲 を 制 限 する には、 ROUT ディレクティブを 使 用 しま<br />
す(「ROUT」 (ページ 7-104) を 参 照 )。 ローカルラベルに 対 する 参 照 では、 同<br />
じ 有 効 範 囲 内 で 一 致 する ラベルが 参 照 さ れます。 有 効 範 囲 内 で 一 致 する ラベ<br />
ルがいずれの 方 向 に も 存 在 し ない 場 合 、 アセンブ ラ は、 エ ラー メ ッ セージを<br />
生 成 し、 アセンブ リ は 失 敗 し ます。<br />
同 じ 有 効 範 囲 内 の 複 数 の ローカルラベルについて 同 じ 数 字 を 使 用 で き ます。<br />
アセンブ リはデフォル ト で、 以 下 のよ う にローカルラベル 参 照 を リ ンク しま<br />
す。<br />
• 有 効 範 囲 内 に ラベルが 1 つあ る 場 合 は、 同 じ 番 号 の 最 新 のローカルラベ<br />
ルに リ ン ク し ます。<br />
• 有 効 範 囲 内 に 先 行 ラベルが 存 在 し ない 場 合 は、 同 じ 番 号 の 次 の ローカル<br />
ラベルにリ ンクします。<br />
この 検 索 パターンを 必 要 に 応 じて 変 更 するには、 オプシ ョ ンパラ メータを 使<br />
用 します。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-33<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
構 文<br />
ローカルラベルの 構 文 は 次 のとおりです。<br />
n{routname}<br />
ローカル ラベルの 参 照 の 構 文 は 次 の と お り です。<br />
%{F|B}{A|T}n{routname}<br />
各 パ ラ メ ータには 以 下 の 意 味 があ り ます。<br />
n<br />
ローカルラベルの 番 号 です。<br />
routname 現 在 の 有 効 範 囲 の 名 前 です。<br />
% 参 照 を 導 入 します。<br />
F<br />
順 方 向 検 索 だけを 実 行 する よ う にアセンブ ラ に 指 示 し ます。<br />
B<br />
逆 方 向 検 索 だけを 実 行 する よ う にアセンブ ラ に 指 示 し ます。<br />
A<br />
すべてのマ ク ロ レベルを 検 索 する よ う にアセンブ ラ に 指 示 し ま<br />
す。<br />
T<br />
アセンブ ラ に 現 在 のマ ク ロ レベルのみの 検 索 を 指 示 し ます。<br />
F も B も 指 定 さ れていない 場 合 、 アセンブ ラ はまず 逆 方 向 に 検 索 し た 後 、 順 方<br />
向 に 検 索 し ます。<br />
A も T も 指 定 さ れていない 場 合 、 アセンブ ラ は、 現 在 のレベルか ら 最 上 位 レベ<br />
ルまでのすべてのマ ク ロ を 検 索 し ます。 現 在 のレベルよ り も 下 位 のマ ク ロ は<br />
検 索 し ません。<br />
routname が ラベルまたはラベルへの 参 照 で 指 定 されている 場 合 、 アセンブ ラ<br />
は、 こ れを、 直 前 の ROUT ディレクティブの 名 前 と 照 合 します。 一 致 し ない 場<br />
合 、 アセンブラは、 エラーメ ッセージを 生 成 し、 アセンブ リは 失 敗 します。<br />
3-34 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
3.6 式 、 リ テ ラル、 演 算 子<br />
こ のセ ク シ ョ ンは 以 下 のサブセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「 文 字 列 式 」<br />
• 「 文 字 列 リ テ ラ ル」 (ページ 3-36)<br />
• 「 数 値 式 」 (ページ 3-36)<br />
• 「 数 値 リ テ ラ ル」 (ページ 3-37)<br />
• 「 浮 動 小 数 点 リ テ ラ ル」 (ページ 3-38)<br />
• 「レ ジ ス タ 相 対 式 と プ ロ グ ラ ム 相 対 式 」 (ページ 3-39)<br />
• 「 論 理 式 」 (ページ 3-39)<br />
• 「 論 理 リ テ ラ ル」 (ページ 3-40)<br />
• 「 演 算 子 の 優 先 順 位 」 (ページ 3-40)<br />
• 「 単 項 演 算 子 」 (ページ 3-42)<br />
• 「2 項 演 算 子 」 (ページ 3-43)<br />
3.6.1 文 字 列 式<br />
文 字 列 式 は、 文 字 列 リ テ ラ ル、 文 字 列 変 数 、 文 字 列 操 作 演 算 子 、 および 括 弧<br />
で 構 成 されます。 詳 細 については、 以 下 を 参 照 して 下 さい。<br />
• 「 変 数 」 (ページ 3-30)<br />
• 「 文 字 列 リ テ ラ ル」 (ページ 3-36)<br />
• 「 単 項 演 算 子 」 (ページ 3-42)<br />
• 「 文 字 列 操 作 演 算 子 」 (ページ 3-44)<br />
• 「SETA、 SETL、 SETS」 (ページ 7-8)<br />
文 字 列 リ テ ラ ル 内 に 配 置 で き ない 文 字 は、 :CHR: 単 項 演 算 子 を 使 用 する こ と に<br />
よ って 文 字 列 式 内 に 配 置 で き ます。 0 ~ 255 の ASCII 文 字 を 使 用 で き ます。<br />
文 字 列 式 の 値 の 長 さは 512 文 字 を 超 えない よ う に し て 下 さ い。 長 さは 0 でもか<br />
まいません。<br />
例<br />
improb SETS "literal":CC:(strvar2:LEFT:4)<br />
; sets the variable improb to the value "literal"<br />
; with the left-most four characters of the<br />
; contents of string variable strvar2 appended<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-35<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
3.6.2 文 字 列 リ テ ラル<br />
文 字 列 リ テ ラ ルは、 一 連 の 文 字 列 を 二 重 引 用 符 で 囲 んで 構 成 し ます。 文 字 列<br />
リ テ ラルの 長 さ は 入 力 行 の 長 さ に よ って 制 限 さ れます (「ソ ース 行 の 形 式 」<br />
(ページ 3-23) を 参 照 )。<br />
文 字 列 内 に 二 重 引 用 符 ま たは ド ル 記 号 を 含 め る には、 二 重 引 用 符 ま たは ド ル<br />
記 号 を 2 文 字 使 用 し ます。<br />
C 言 語 形 式 の 文 字 列 エス ケープシーケ ン スは、--no_esc が 指 定 されない 限 り イ<br />
ネーブルにな り ます (「コ マン ド 構 文 」 (ページ 3-2) を 参 照 )。<br />
サンプル<br />
abc SETS "this string contains only one "" double quote"<br />
def SETS "this string contains only one $$ dollar symbol"<br />
3.6.3 数 値 式<br />
数 値 式 は、 数 値 定 数 、 数 値 変 数 、 通 常 の 数 値 リ テ ラ ル、 二 項 演 算 子 、 括 弧 の<br />
組 み 合 わせで 構 成 さ れます。 詳 細 については、 以 下 を 参 照 し て 下 さ い。<br />
• 「 数 値 定 数 」 (ページ 3-30)<br />
• 「 変 数 」 (ページ 3-30)<br />
• 「 数 値 リ テ ラ ル」 (ページ 3-37)<br />
• 「2 項 演 算 子 」 (ページ 3-43)<br />
• 「SETA、 SETL、 SETS」 (ページ 7-8)<br />
式 全 体 が、 レ ジ ス タ ま たは PC を 含 まない 値 に 評 価 される 場 合 、 数 値 式 には<br />
レ ジ ス タ 相 対 式 ま たはプ ロ グ ラ ム 相 対 式 を 含 め る こ と がで き ます。<br />
数 値 式 は 32 ビッ ト 整 数 に 評 価 されます。 これらは、0 ~ 2 32 –1 の 範 囲 の 符 号 な<br />
し 数 値 と して、 または –2 31 ~ 2 31 –1 の 範 囲 の 符 号 あ り 数 値 と し て 解 釈 でき ま<br />
す。 しかし、 アセンブラは –n と 2 32 –n を 区 別 し ません。 > = などの 関 係 演 算 子<br />
は、 符 号 な し と し て 解 釈 さ れます。 その 結 果 、 0 > –1 is {FALSE} として 処 理 され<br />
ます。<br />
例<br />
a SETA 256*256 ; 256*256 is a numeric expression<br />
MOV r1,#(a*22) ; (a*22) is a numeric expression<br />
3-36 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
3.6.4 数 値 リ テ ラル<br />
数 値 リ テ ラルには、 以 下 のいずれかの 形 式 を 使 用 で き ます。<br />
decimal-digits<br />
0xhexadecimal-digits<br />
&hexadecimal-digits<br />
n_base-n-digits<br />
'character'<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
decimal-digits<br />
hexadecimal-digits<br />
n_<br />
base-n-digits<br />
character<br />
0 ~ 9 の 数 値 だけを 使 用 し た 文 字 列 です。<br />
0 ~ 9 の 数 字 と A ~ F または a ~ f だけを 使 用 し た 文 字 列<br />
です。<br />
2 ~ 9 のいずれかの 数 字 に 下 線 付 き 文 字 を 続 けた 文 字 列 で<br />
す。<br />
0 ~ (n –1) の 数 字 のみを 使 用 し た 文 字 列 です。<br />
単 一 引 用 符 を 除 く 任 意 の 1 文 字 です。 単 一 引 用 符 を 表 示 す<br />
る 場 合 は、 \' を 使 用 します。 こ の 場 合 、 数 値 リ テ ラ ルの 値<br />
は 文 字 の 数 値 コー ド です。<br />
上 記 以 外 の 文 字 は 使 用 でき ません。 文 字 列 は、 0 ~ 2 32 –1 の 整 数 に 評 価 される<br />
必 要 があ り ます ( 範 囲 が 0 ~ 2 64 –1 である DCQ および DCQU ディレクティブを 除<br />
く)。<br />
サンプル<br />
a SETA 34906<br />
addr DCD 0xA10E<br />
LDR r4,=&1000000F<br />
DCD 2_11001010<br />
c3 SETA 8_74007<br />
DCQ 0x0123456789abcdef<br />
LDR r1,='A' ; pseudo-instruction loading 65 into r1<br />
ADD r3,r2,#'\'' ; add 39 to contents of r2, result to r3<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-37<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
3.6.5 浮 動 小 数 点 リ テ ラル<br />
浮 動 小 数 点 リ テ ラ ルには、 以 下 のいずれかの 形 式 を 使 用 で き ます。<br />
{-}digits E{-}digits<br />
{-}{digits}.digits<br />
{-}{digits}.digitsE{-}digits<br />
0xhexdigits<br />
&hexdigits<br />
0f_hexdigits<br />
0d_hexdigits<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
digits<br />
hexdigits<br />
0 ~ 9 の 数 字 のみを 使 用 し た 文 字 列 です。 E は 大 文 字 ま たは 小 文<br />
字 で 記 述 でき ます。 こ れら の 形 式 は 通 常 の 浮 動 小 数 点 表 記 に 対 応<br />
します。<br />
0 ~ 9 の 数 字 と A ~ F または a ~ f の 文 字 のみを 使 用 した 文 字 列<br />
です。 これらの 形 式 は、 コンピュータにおける 数 値 の 内 部 表 現<br />
に 対 応 し ます。 無 限 値 および NaN を 入 力 する 場 合 、 ま たは 使 用<br />
する 正 しいビ ッ ト パターンが 不 明 な 場 合 は、 これらの 形 式 を 使<br />
用 します。<br />
0x および & では、 浮 動 小 数 点 ビ ッ ト パターン を 16 進 数 で 指 定 で き ます。<br />
0f_ 形 式 では、 浮 動 小 数 点 ビ ッ ト パターン を 8 桁 の 8 進 数 で 指 定 する 必 要 があ<br />
ります。<br />
0d_ 形 式 では、 浮 動 小 数 点 ビ ッ ト パターン を 16 桁 の 16 進 数 で 指 定 する 必 要 が<br />
あります。<br />
単 精 度 浮 動 小 数 点 数 値 の 範 囲 は 以 下 の と お り です。<br />
• 最 大 : 3.40282347e+38<br />
• 最 小 : 1.17549435e–38<br />
倍 精 度 浮 動 小 数 点 数 値 の 範 囲 は 以 下 の と お り です。<br />
• 最 大 : 1.79769313486231571e+308<br />
• 最 小 : 2.22507385850720138e–308<br />
3-38 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
サンプル<br />
DCFD 1E308,-4E-100<br />
DCFS 1.0<br />
DCFD 3.725e15<br />
DCFS 0x7FC00000 ; Quiet NaN<br />
DCFD &FFF0000000000000 ; Minus infinity<br />
3.6.6 レジス タ 相 対 式 と プログラム 相 対 式<br />
レ ジ ス タ 相 対 式 は、 名 前 付 き レ ジ ス タ に 数 値 定 数 を 加 算 ま たは 減 算 し た 値 に<br />
評 価 さ れます (「MAP」 (ページ 7-21) を 参 照 )。<br />
プログラム 相 対 アドレスは、 現 在 のプログラムカウンタ (PC) からのオフ<br />
セッ ト として 表 現 されます。 通 常 、 数 値 式 と 組 み 合 わせた ラベル と な り ます。<br />
以 下 の 手 順 は、 プ ロ グ ラ ム 相 対 ア ド レ スの 評 価 結 果 を 示 し た も のです。<br />
1. 現 在 実 行 中 の 命 令 に 続 く 命 令 のア ド レ ス<br />
2. 0xFFFFFFFC でのビ ッ ト 単 位 論 理 和 (<strong>ARM</strong> コードでは 違 いがあ り ません)<br />
3. 数 値 定 数 の 加 算 ま たは 減 算<br />
例<br />
LDR r4,=data+4*n ; n is an assembly-time variable<br />
; code<br />
MOV pc,lr<br />
data DCD value_0<br />
; n-1 DCD directives<br />
DCD value_n ; data+4*n points here<br />
; more DCD directives<br />
3.6.7 論 理 式<br />
論 理 式 は、 論 理 リ テ ラ ル ({TRUE} または {FALSE})、 論 理 変 数 、 ブール 演 算 子 、<br />
関 係 、 および 括 弧 を 組 み 合 わせた も ので 構 成 さ れます (「ブール 演 算 子 」<br />
(ページ 3-48) を 参 照 )。<br />
関 係 は、 変 数 、 リ テ ラ ル、 定 数 、 ま たは 適 切 な 関 係 演 算 子 が 含 まれる 式 を 組<br />
み 合 わせた も ので 構 成 さ れます (「 関 係 演 算 子 」 (ページ 3-47) を 参 照 )。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-39<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
3.6.8 論 理 リ テ ラル<br />
論 理 リ テ ラ ルは 次 の と お り です。<br />
• {TRUE}<br />
• {FALSE}<br />
3.6.9 演 算 子 の 優 先 順 位<br />
<strong>ARM</strong> アセンブ ラ には、 式 で 使 用 で き る 広 範 な 演 算 子 セ ッ ト が 含 まれていま<br />
す。 <strong>ARM</strong> アセンブ ラ に 用 意 さ れてい る 演 算 子 の 多 く には、 C 言 語 などの 高 級<br />
言 語 で 使 用 さ れる 演 算 子 と 同 様 の 機 能 があ り ます (「 単 項 演 算 子 」 (ページ<br />
3-42) および 「2 項 演 算 子 」 (ページ 3-43) を 参 照 )。<br />
評 価 する 際 、 厳 密 な 優 先 順 位 があ り ます。<br />
1. 最 初 に、 括 弧 内 の 式 が 評 価 されます。<br />
2. 演 算 子 は 優 先 順 位 に 従 って 適 用 さ れます。<br />
3. 隣 接 する 単 項 演 算 子 は、 右 か ら 左 に 評 価 さ れます。<br />
4. 優 先 順 位 が 同 じ 2 項 演 算 子 は、 左 か ら 右 に 評 価 さ れます。<br />
armasm と C 言 語 における 演 算 子 の 優 先 順 位<br />
<strong>ARM</strong> アセンブ ラ におけ る 優 先 順 位 は、 C 言 語 と は 異 な り ます。<br />
例 えば、(1 + 2 :SHR: 3) は armasm では (1 + (2 :SHR: 3)) = 1 と 評 価 されます。 等<br />
価 の 式 が C では ((1 + 2) >> 3) = 0 と 評 価 されます。<br />
括 弧 を 使 う こ とによって 優 先 順 位 を 明 示 的 に 示 すこ と をお 勧 めし ます。<br />
C 言 語 でアセンブ ラ と 違 っ た 解 析 を さ れる 式 が コー ド に 含 まれていて、<br />
--unsafe オプシ ョ ン を 使 用 し ていない 場 合 は 通 常 、 armasm によって 次 のよ うな<br />
警 告 が 表 示 さ れます。<br />
A1466W: Operator precedence means that expression would evaluate differently in C<br />
表 3-4 (ページ 3-41) に、 armasm での 演 算 子 の 優 先 順 位 と 、 C におけ る 優 先 順<br />
位 との 比 較 を 記 載 します ( 表 3-5 (ページ 3-41) を 参 照 )。<br />
次 の 表 から 以 下 の 点 を 確 認 でき ます。<br />
• 最 も 優 先 順 位 の 高 い 演 算 子 は リ ス ト の 最 上 位 にあ り ます。<br />
• 最 も 優 先 順 位 の 高 い 演 算 子 は 最 初 に 評 価 さ れます。<br />
3-40 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
• 優 先 順 位 が 同 じ 演 算 子 は、 左 か ら 右 に 評 価 さ れます。<br />
表 3-4 armasm における 演 算 子 の 優 先 順 位<br />
armasm の 優 先 順 位<br />
単 項 演 算 子<br />
C における 同 等 の 演 算 子<br />
単 項 演 算 子<br />
* / :MOD: * / %<br />
文 字 列 操 作<br />
n/a<br />
:SHL: :SHR: :ROR: :ROL: ><br />
+ - :AND: :OR: :EOR: + - & | ^<br />
= > >= < >= < <br />
< >=<br />
== !=<br />
&<br />
^<br />
|<br />
&<br />
||<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-41<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
3.6.10 単 項 演 算 子<br />
単 項 演 算 子 は 最 も 優 先 順 位 が 高 く 、 最 初 に 評 価 さ れます。 単 項 演 算 子 はその<br />
オペラ ン ド よ り も 優 先 順 位 が 高 く な り ます。 隣 接 する 演 算 子 は 右 か ら 左 に 評<br />
価 されます。<br />
表 3-6 に、 文 字 列 を 返 す 単 項 演 算 子 を 示 し ます。<br />
演 算 子 使 用 法 説 明<br />
表 3-7 に、 数 値 を 返 す 単 項 演 算 子 を 示 し ます。<br />
表 3-6 文 字 列 を 返 す 単 項 演 算 子<br />
:CHR: :CHR:A ASCII コード A が 含 まれている 文 字 を 返 し ます。<br />
:LOWERCASE: :LOWERCASE:string すべての 大 文 字 を 小 文 字 に 変 換 し て 所 定 の 文 字 列 を 返 し ま<br />
す。<br />
:REVERSE_CC: :REVERSE_CC:cond_code cond_code が 有 効 な 条 件 コー ド を 含 ま ない 場 合 、 cond_code での<br />
条 件 コー ド の 逆 数 ま たはエ ラーを 返 し ます。<br />
:STR: :STR:A 数 値 式 に 対 応 する 8 桁 の 16 進 数 文 字 列 、 ま たは、 論 理 式 で 使<br />
用 さ れてい る 場 合 は 文 字 列 "T" または "F" を 返 します。<br />
:UPPERCASE: :UPPERCASE:string すべての 小 文 字 を 大 文 字 に 変 換 し て 所 定 の 文 字 列 を 返 し ま<br />
す。<br />
演 算 子 使 用 法 説 明<br />
表 3-7 数 値 または 論 理 値 を 返 す 単 項 演 算 子<br />
? ?A シンボル A を 定 義 する 行 に よ って 生 成 さ れた 実 行 可 能 コー ド の<br />
バイ ト 数 。<br />
+ および - +A<br />
-A<br />
単 項 プ ラ ス。 単 項 マ イナス。 + 記 号 と – 記 号 で、 数 値 相 対 式 と プ<br />
ロ グ ラ ム 相 対 式 に 対 し て 影 響 を 与 え る こ と がで き ます。<br />
:BASE: :BASE:A A が PC 相 対 式 ま たはレ ジ ス タ 相 対 式 の 場 合 、 :BASE: は、 そのレ<br />
ジスタコンポーネン トの 番 号 を 返 します。:BASE: はマク ロで 非<br />
常 に 便 利 です。<br />
:CC_ENCODING: :CC_ENCODING:cond_code cond_code が 有 効 な 条 件 コー ド を 含 ま ない 場 合 、 cond_code での 条<br />
件 コードの 数 値 またはエラーを 返 します。<br />
:DEF: :DEF:A A が 定 義 されている 場 合 は {TRUE}、そ う でない 場 合 は {FALSE} で<br />
す。<br />
3-42 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
表 3-7 数 値 または 論 理 値 を 返 す 単 項 演 算 子 ( 続 き)<br />
演 算 子 使 用 法 説 明<br />
:INDEX: :INDEX:A A がレ ジ ス タ 相 対 式 の 場 合 、 :INDEX: はそのベースレジス タから<br />
のオフセッ ト を 返 し ます。 :INDEX: はマ ク ロで 非 常 に 便 利 です。<br />
:LEN: :LEN:A 文 字 列 A の 長 さ。<br />
:LNOT: :LNOT:A A の 論 理 補 数 。<br />
:NOT: :NOT:A A のビ ッ ト 単 位 補 数 (~ はエイ リ アスです。 例 : ~A)。<br />
:RCONST: :RCONST:Rn r0 ~ r15 に 対 応 する レ ジ ス タ の 番 号 0 ~ 15。<br />
3.6.11 2 項 演 算 子<br />
2 項 演 算 子 は、 演 算 対 象 の 一 対 の 部 分 式 の 間 に 記 述 し ます。<br />
2 項 演 算 子 は 単 項 演 算 子 よ り も 優 先 順 位 は 低 く な り ます。 このセクショ ンで<br />
は、 こ の 優 先 順 位 に 従 って 2 項 演 算 子 を 取 り 上 げています。<br />
注<br />
優 先 順 位 は C と 異 なります。 「armasm と C 言 語 におけ る 演 算 子 の 優 先 順 位 」<br />
(ページ 3-40) を 参 照 して 下 さい。<br />
乗 算 演 算 子<br />
乗 算 演 算 子 は、 すべての 2 項 演 算 子 の 中 で 最 も 優 先 順 位 が 高 く な り ます。 乗 算<br />
演 算 子 は 数 値 式 にのみ 作 用 し ます。<br />
表 3-8 に 乗 算 演 算 子 を 示 し ます。<br />
演 算 子 エ イ リ アス 使 用 法 説 明<br />
* A*B 乗 算<br />
/ A/B 除 算<br />
表 3-8 乗 算 演 算 子<br />
:MOD: % A:MOD:B A と B のモジュ ロ<br />
演 算 (A を B で<br />
割 って 余 り を 求 め<br />
る)<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-43<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
文 字 列 操 作 演 算 子<br />
表 3-9 に 文 字 列 操 作 演 算 子 を 示 し ます。 CC では、 A と B はいずれ も 文 字 列 でな<br />
ければな り ません。 ス ラ イ ス 演 算 子 LEFT および RIGHT の 場 合<br />
• A は 文 字 列 でなければな り ません。<br />
• B は 数 値 式 でなけれな り ません。<br />
演 算 子 使 用 法 説 明<br />
表 3-9 文 字 列 操 作 演 算 子<br />
:CC: A:CC:B B は A の 末 尾 に 連 結 さ れます。<br />
:LEFT: A:LEFT:B A の 左 から B 文 字<br />
:RIGHT: A:RIGHT:B A の 右 から B 文 字<br />
3-44 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
シ フ ト 演 算 子<br />
シフ ト 演 算 子 は 数 値 式 に 作 用 し、 最 初 のオペラ ン ド を、 2 番 目 のオペラ ン ド<br />
で 指 定 されている 量 だけシフ ト または 回 転 させます。<br />
表 3-10 にシ フ ト 演 算 子 を 示 し ます。<br />
表 3-10 シ フ ト 演 算 子<br />
演 算 子<br />
エイリア<br />
ス<br />
使 用 法<br />
説 明<br />
:ROL: A:ROL:B A を B ビッ ト 分 左 に 回 転<br />
させます。<br />
:ROR: A:ROR:B A を B ビッ ト 分 右 に 回 転<br />
させます。<br />
:SHL: > A:SHR:B A を B ビッ ト 分 右 にシフ<br />
トさせます。<br />
注<br />
SHR は 論 理 シフ ト であ り 、 符 号 ビ ッ ト まで 波 及 し ません。<br />
加 算 、 減 算 、 および 論 理 演 算 子<br />
加 算 および 減 算 演 算 子 は 数 値 式 に 作 用 し ます。<br />
論 理 演 算 子 は 数 値 式 に 作 用 し ます。 処 理 は、 ビッ ト 単 位 で 実 行 さ れます。 つ<br />
ま り 、 オペラ ン ド の 各 ビ ッ ト に 関 係 な く 結 果 が 生 成 されます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-45<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
表 3-11 に 加 算 、 減 算 、 および 論 理 演 算 子 を 示 し ます。<br />
表 3-11 加 算 、 減 算 、 および 論 理 演 算 子<br />
演 算 子<br />
エイリ<br />
アス<br />
使 用 法<br />
説 明<br />
+ A+B A を B に 加 算<br />
- A-B A から B を 減 算<br />
:AND: & A:AND:B A と B のビ ッ ト 単 位 論 理 積<br />
:EOR: ^ A:EOR:B A と B のビ ッ ト 単 位 排 他 的 論 理<br />
和 (XOR)<br />
:OR: | A:OR:B A と B のビ ッ ト 単 位 論 理 和<br />
3-46 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
関 係 演 算 子<br />
表 3-12 に 関 係 演 算 子 を 示 し ます。 関 係 演 算 子 は、 同 じ タ イ プの 2 つのオペラ<br />
ンドに 作 用 して 論 理 値 を 生 成 します。<br />
オペラ ン ド には 以 下 のタ イプを 指 定 でき ます。<br />
• 数 値<br />
• プログラム 相 対<br />
• レジスタ 相 対<br />
• 文 字 列<br />
文 字 列 は ASCII 順 序 を 使 用 し て ソー ト さ れます。 文 字 列 A は、 文 字 列 B の 先 頭<br />
にあ る 部 分 文 字 列 であ る 場 合 、 文 字 列 B よ りも 小 さくなります。また、2 つの<br />
文 字 列 で 異 な る 左 端 の 文 字 が、 文 字 列 B よ り も 文 字 列 A で 小 さ く なる 場 合 も、<br />
文 字 列 A は 文 字 列 B よ りも 小 さくなります。<br />
数 値 は 符 号 な し なので、 0>-1 の 値 は {FALSE} となります。<br />
演 算 子 エ イ リ アス 使 用 法 説 明<br />
= == A=B A は B と 同 等 です。<br />
表 3-12 関 係 演 算 子<br />
> A>B A は B よりも 大 きくなりま<br />
す。<br />
>= A>=B A は B 以 上 です。<br />
< A
アセン ブ ラに 関 する 参 考 情 報<br />
ブール 演 算 子<br />
ブール 演 算 子 は、 最 も 優 先 順 位 の 低 い 演 算 子 です。 ブール 演 算 子 は、 そのオ<br />
ペラ ン ド に 対 し て 標 準 論 理 演 算 を 実 行 し ます。<br />
3 つのケースでも、 A と B の 両 方 の 式 は、 {TRUE} または {FALSE} のいずれかに<br />
評 価 さ れなければな り ません。<br />
表 3-13 にブール 演 算 子 を 示 し ます。<br />
演 算 子 エ イ リ アス 使 用 法 説 明<br />
:LAND: & A:LAND:B A と B の 論 理 積<br />
表 3-13 ブール 演 算 子<br />
:LEOR: A:LEOR:B A と B の 排 他 的 論 理 和 (XOR)<br />
:LOR: || A:LOR:B A と B の 論 理 和<br />
3-48 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
3.7 診 断 メ ッ セージ<br />
<strong>ARM</strong> アセンブラでは、 追 加 の 診 断 メ ッ セージの 範 囲 を 指 定 でき ます。 デフォ<br />
ルトでは、 こられの 診 断 メッセージは 表 示 されません。 ただし、 コマン ド ラ<br />
イ ンオプシ ョ ン を 使 用 し て、 どの メ ッ セージをアセンブ ラ で 表 示 する かを 制<br />
御 でき ます。 詳 細 については、 「 診 断 メ ッ セージの 出 力 の 制 御 」 (ページ 3-19)<br />
を 参 照 して 下 さい。<br />
こ のセ ク シ ョ ンは 以 下 のサブセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「インターロ ッ ク」<br />
• 「IT ブ ロ ッ ク 生 成 」 (ページ 3-50)<br />
• 「Thumb 分 岐 ターゲ ッ ト のワー ド 境 界 整 列 」 (ページ 3-50)<br />
3.7.1 インターロック<br />
--cpu オプシ ョ ンによ って 選 択 されたプロセッサのパイプラ インが 原 因 でコー<br />
ド 内 で 発 生 可 能 な イ ン ターロ ッ ク に 関 する 警 告 メ ッ セージを 表 示 で き ます。<br />
これには、 アセンブラの 起 動 時 に 次 のコマン ド ラ イ ンオプシ ョ ンを 使 用 し ま<br />
す。<br />
armasm --diag_warning 1563<br />
注<br />
ここで、--cpu オプシ ョ ンは、 Cortex-A8 などのマルチイッシュープロセッサを<br />
指 定 し ます。 アセンブ ラ 警 告 は 予 測 不 可 能 にな り ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-49<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
3.7.2 IT ブロック 生 成<br />
次 のよ う に 記 述 し ます。<br />
AREA x,CODE<br />
THUMB<br />
MOVNE r0,r1 ; (1)<br />
NOP<br />
IT NE<br />
MOVNE r0,r1 ; (2)<br />
END<br />
アセンブラによ り、 最 初 の MOVNE 命 令 の 前 に、 IT 命 令 が 生 成 さ れます。<br />
Thumb コードをアセンブルする 際 にこの IT ブ ロ ッ ク の 自 動 生 成 に 関 する 警 告<br />
メ ッ セージを 表 示 で き ます。 これには、 アセンブラの 起 動 時 に 次 のコマンド<br />
ラインオプションを 使 用 します。<br />
armasm --diag_warning 1763<br />
3.7.3 Thumb 分 岐 タ ーゲ ッ ト のワー ド 境 界 整 列<br />
一 部 のプ ロ セ ッ サでは、 非 ワー ド 境 界 整 列 の Thumb 命 令 をループで 実 行 する<br />
と、 1 つ 以 上 の 余 分 なサ イ ク ルが 発 生 し ます。 そのため、 分 岐 ターゲッ ト が<br />
ワー ド 境 界 整 列 さ れる よ う にする と 有 利 です。 Thumb コードの 分 岐 ターゲッ<br />
ト がワー ド 境 界 整 列 さ れない と き にアセンブ ラ は 警 告 を 表 示 する こ と がで き<br />
ます。 これには、 アセンブラの 起 動 時 に 次 のコマンド ラインオプシ ョ ンを 使<br />
用 します。<br />
armasm --diag_warning 1604<br />
3-50 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
アセンブラに 関 する 参 考 情 報<br />
3.8 C プリプロセッサを 使 用 する<br />
C プリプロセッサコマンドを、 アセンブリ 言 語 のソースファ イルに 使 用 でき<br />
ます。 これを 行 う 場 合 には、 アセンブラの 起 動 時 に --cpreproc コマンドライン<br />
オプシ ョ ン を 指 定 する 必 要 があ り ます。 そうすると、armasm が armcc を 呼 び 出<br />
し て、 フ ァ イルを 前 処 理 し てか ら アセンブルする よ う にな り ます。<br />
armasm は、 armasm バイナリ と 同 じディ レク ト リで armcc バイナリ を 探 します。<br />
バ イ ナ リ を 見 つけ ら れない 場 合 、 PATH 上 にあ る もの と 判 断 し ます。<br />
特 定 のオプシ ョ ンが コ マン ド ラ イ ンで 指 定 さ れてい る 場 合 、 armasm は armcc に<br />
そのオプシ ョ ンを 渡 し ます。 表 3-14 に、 それを 示 し ます。 これらのオプショ<br />
ンの 一 部 は、 armcc におけ る 等 価 のオプシ ョ ンに 変 換 されてから、 armcc に 渡 さ<br />
れます。 表 3-15 に、 それを 示 し ます。<br />
--16 --arm_only --diag_error --diag_warning --li<br />
表 3-14 コマンドラインオプション<br />
--32 --bi --diag_remark --fpu --library_type<br />
--apcs --cpu --diag_style --fpumode --thumb<br />
--arm --device --diag_suppress --i --[no_]unaligned_access<br />
表 3-15 armcc における 等 価 のコ マン ド ラ イ ンオプシ ョ ン<br />
armasm<br />
armcc<br />
--16 --thumb<br />
--32 --arm<br />
--i<br />
--I<br />
他 の 単 純 な コ ンパイ ラオプシ ョ ン (プ リ プロセ ッ サオプシ ョ ン -D など) を 渡<br />
すには、 --cpreproc_opts コ マン ド ラ イ ンオプシ ョ ン を 使 用 する 必 要 があ り ま<br />
す。 詳 細 については、 『コンパイ ラユーザガイ ド』 を 参 照 して 下 さい。 armasm<br />
は、 前 処 理 された #line コ マン ド を 正 確 に 解 釈 し ます。 #line コマンドの 情 報 を<br />
使 用 し てエ ラー メ ッ セージおよび debug_line テーブルが 生 成 されます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 3-51<br />
Non-Confidential
アセン ブ ラに 関 する 参 考 情 報<br />
例 3-1 に、 フ ァ イル source.s を 前 処 理 してアセンブルするためのコマン ド を<br />
示 します。 この 例 ではまた、 コンパイラオプションを 渡 して RELEASE という<br />
名 前 のマ ク ロ を 定 義 し、 ALPHA とい う 名 前 のマク ロの 定 義 を 解 除 していま<br />
す。<br />
例 3-1 アセンブ リ 言 語 のソース フ ァ イルの 前 処 理<br />
armasm --cpreproc --cpreproc_opts=-D,RELEASE,-U,ALPHA source.s<br />
複 雑 なプ リ プ ロ セ ッ サオプシ ョ ン を 使 用 する には、 armcc を 手 動 で 呼 び 出 して<br />
ファイルを 前 処 理 してから armasm を 呼 び 出 す 必 要 があ り ます。 例 3-2 に、<br />
ファイル source.s を 手 動 で 前 処 理 してアセンブルするためのコマンドを 示 し<br />
ます。 この 例 では、 プリプロセッサによって preprocessed.s という 名 前 のファ<br />
イルが 出 力 され、armasm によって preprocessed.s がアセンブルされます。<br />
例 3-2 アセンブ リ 言 語 のソース フ ァ イルの 手 動 によ る 前 処 理<br />
armcc -E source.s > preprocessed.s<br />
armasm preprocessed.s<br />
3-52 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
第 4 章<br />
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
本 章 では、 <strong>ARM</strong> アセンブラでサポート されている <strong>ARM</strong> ® 、 Thumb ® (すべて<br />
のバージ ョ ン)、 および ThumbEE 命 令 について 説 明 し ます。 以 下 のセ ク シ ョ<br />
ンから 構 成 されています。<br />
• 「 命 令 の 概 要 」 (ページ 4-3)<br />
• 「 メ モ リ ア ク セ ス 命 令 」 (ページ 4-10)<br />
• 「 汎 用 データ 処 理 命 令 」 (ページ 4-46)<br />
• 「 乗 算 命 令 」 (ページ 4-77)<br />
• 「サチュ レー ト 命 令 」 (ページ 4-100)<br />
• 「 並 列 命 令 」 (ページ 4-105)<br />
• 「パ ッ ク 命 令 と 展 開 命 令 」 (ページ 4-113)<br />
• 「 分 岐 命 令 と 制 御 命 令 」 (ページ 4-122)<br />
• 「コプロセッサ 命 令 」 (ページ 4-132)<br />
• 「その 他 の 命 令 」 (ページ 4-140)<br />
• 「Thumb での 命 令 の 幅 の 選 択 」 (ページ 4-159)<br />
• 「ThumbEE 命 令 」 (ページ 4-161)<br />
• 「 疑 似 命 令 」 (ページ 4-165)<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-1<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
命 令 セクションの 中 にはアーキテクチャサブセクションを 含 むものがありま<br />
す。 アーキテクチャサブセクションを 持 たない 命 令 は、すべてのバージョン<br />
の <strong>ARM</strong> 命 令 セ ッ ト およびすべてのバージ ョ ンの Thumb 命 令 セ ッ ト で 使 用 で<br />
きるものです。<br />
4-2 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.1 命 令 の 概 要<br />
表 4-1 は、 <strong>ARM</strong>、 Thumb、 および ThumbEE 命 令 セ ッ ト で 使 用 で き る 命 令 の 概<br />
要 を 示 しています。 こ の 表 を 使 用 し て、 本 章 の 残 り の 部 分 に 記 載 さ れてい る<br />
各 命 令 および 疑 似 命 令 の 説 明 に 移 動 で き ます。<br />
注<br />
特 に 明 記 し ていない 限 り 、 ThumbEE 命 令 は Thumb 命 令 と 同 一 です。<br />
表 4-1 命 令 の 参 照 ページ<br />
ニーモニ ッ ク 概 要 ページ<br />
アーキテ<br />
クチャ a<br />
ADC、 ADD キ ャ リ ー 付 き 加 算 、 加 算 (ページ 4-51) すべて<br />
ADR<br />
プログラム 相 対 アドレスまたはレジスタ 相 対 アドレス<br />
の ロー ド ( 狭 範 囲 )<br />
(ページ 4-24)<br />
すべて<br />
ADRL 疑 似 命 令<br />
プ ロ グ ラ ム 相 対 ア ド レ ス ま たはレ ジ ス タ 相 対 ア ド レ ス<br />
の ロー ド ( 中 範 囲 )<br />
(ページ 4-166)<br />
x6M<br />
AND 論 理 積 (ページ 4-58) すべて<br />
ASR 算 術 右 シフ ト (ページ 4-73) すべて<br />
B 分 岐 (ページ 4-123) すべて<br />
BFC、 BFI ビ ッ ト フ ィ ール ド の ク リ ア 命 令 と 挿 入 命 令 (ページ 4-114) T2<br />
BIC ビ ッ ト ク リ ア (ページ 4-58) すべて<br />
BKPT ブレー ク ポ イ ン ト (ページ 4-141) 5<br />
BL リ ン ク 付 き 分 岐 命 令 (ページ 4-123) すべて<br />
BLX リ ン ク 付 き 分 岐 、 命 令 セ ッ ト の 変 更 (ページ 4-123) T<br />
BX 分 岐 、 命 令 セ ッ ト の 変 更 (ページ 4-123) T<br />
BXJ 分 岐 、 Jazelle へ 変 更 (ページ 4-123) J、 x7M<br />
CBZ, CBNZ<br />
0 と 比 較 し、 0 の (または 0 でない) 場 合 に 分 岐 する 命<br />
令<br />
(ページ 4-130)<br />
T2<br />
CDP コ プ ロ セ ッ サデータ 処 理 命 令 (ページ 4-133) x6M<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-3<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
表 4-1 命 令 の 参 照 ページ ( 続 き)<br />
ニーモニ ッ ク 概 要 ページ<br />
アーキテ<br />
クチャ a<br />
CDP2 コ プ ロ セ ッ サデータ 処 理 命 令 (ページ 4-133) 5、 x6M<br />
CHKA 配 列 をチェ ッ ク する 命 令 (ページ 4-163) EE<br />
CLREX 排 他 の ク リ ア 命 令 (ページ 4-43) K、 x6M<br />
CLZ 先 行 ゼ ロ カ ウ ン ト (ページ 4-61) 5、 x6M<br />
CMN、 CMP 否 定 値 の 比 較 、 比 較 命 令 (ページ 4-62) すべて<br />
CPS プ ロ セ ッ サ 状 態 の 変 更 命 令 (ページ 4-148) 6<br />
DBG デバ ッ グ (ページ 4-154) 7<br />
DMB、 DSB データ メ モ リ バ リ ア、 データ 同 期 バ リ ア (ページ 4-154) 7、 6M<br />
ENTERX、 LEAVEX ThumbEE と の 間 の 状 態 切 り 替 え 命 令 (ページ 4-162) EE<br />
EOR 排 他 的 論 理 和 (XOR) (ページ 4-58) すべて<br />
HB、 HBL、 HBLP、 HBP ハン ド ラ の 分 岐 、 指 定 さ れたハン ド ラへの 分 岐 (ページ 4-164) EE<br />
ISB 命 令 同 期 バ リ ア (ページ 4-154) 7、 6M<br />
IT If-Then (ページ 4-127) T2<br />
LDC コ プ ロ セ ッ サ ロー ド (ページ 4-138) x6M<br />
LDC2 コ プ ロ セ ッ サ ロー ド (ページ 4-138) 5、 x6M<br />
LDM 多 重 レ ジ ス タ ロー ド (ページ 4-29) すべて<br />
LDR レ ジ ス タ ロー ド 命 令 (ページ 4-10) すべて<br />
LDR 疑 似 命 令 レ ジ ス タ ロー ド 疑 似 命 令 (ページ 4-170) すべて<br />
LDREX 排 他 的 レ ジ ス タ ロー ド (ページ 4-40) 6、 x6M<br />
LDREXB、 LDREXH 排 他 的 レ ジ ス タ ロー ド (バイ ト 、 ハーフ ワー ド ) (ページ 4-40) K、 x6M<br />
LDREXD 排 他 的 レ ジ ス タ ロー ド (ダブルワー ド ) (ページ 4-40) K、 x7M<br />
LSL、 LSR 論 理 左 シフ ト 、 論 理 右 シフ ト (ページ 4-73) すべて<br />
MAR レジスタから 40 ビ ッ ト 累 算 器 への 移 動 命 令 (ページ 4-157) XScale<br />
4-4 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
表 4-1 命 令 の 参 照 ページ ( 続 き)<br />
ニーモニ ッ ク 概 要 ページ<br />
アーキテ<br />
クチャ a<br />
MCR レ ジ ス タ か ら コ プ ロ セ ッ サへの 移 動 命 令 (ページ 4-134) x6M<br />
MCR2 レ ジ ス タ か ら コ プ ロ セ ッ サへの 移 動 命 令 (ページ 4-134) 5、 x6M<br />
MCRR レ ジ ス タ か ら コ プ ロ セ ッ サへの 移 動 命 令 (ページ 4-134) 5E、 x6M<br />
MCRR2 レ ジ ス タ か ら コ プ ロ セ ッ サへの 移 動 命 令 (ページ 4-134) 6、 x6M<br />
MIA、 MIAPH、 MIAxy 乗 算 および 内 部 40 ビ ッ ト 加 算 (ページ 4-98) XScale<br />
MLA 積 和 (ページ 4-79) x6M<br />
MLS 積 差 (ページ 4-79) T2<br />
MOV 移 動 命 令 (ページ 4-64) すべて<br />
MOVT 上 位 ハーフ ワー ド にデータ を 代 入 する 命 令 (ページ 4-67) T2<br />
MOV32 疑 似 命 令 レ ジ ス タへの 32 ビ ッ ト 定 数 の 移 動 命 令 (ページ 4-168) T2<br />
MRA 40 ビ ッ ト 累 算 器 か ら レ ジ ス タへの 移 動 (ページ 4-157) XScale<br />
MRC コ プ ロ セ ッ サか ら レ ジ ス タへの 移 動 命 令 (ページ 4-136) すべて<br />
MRC2 コ プ ロ セ ッ サか ら レ ジ ス タへの 移 動 命 令 (ページ 4-136) 5、 x6M<br />
MRS PSR か ら レ ジ ス タへの 移 動 命 令 (ページ 4-143) すべて<br />
MSR レジスタから PSR への 移 動 命 令 (ページ 4-145) すべて<br />
MUL 乗 算 (ページ 4-79) すべて<br />
MVN データ の 各 ビ ッ ト を 反 転 させてか ら 代 入 する 命 令 (ページ 4-64) すべて<br />
NOP 操 作 な し (ページ 4-152) すべて<br />
ORN 論 理 和 否 定 (ページ 4-58) T2<br />
ORR 論 理 和 (ページ 4-58) すべて<br />
PKHBT、 PKHTB ハーフ ワー ド のパ ッ ク 命 令 (ページ 4-120) 6、 x7M<br />
PLD データ をプ リ ロー ド (ページ 4-26) 5E、 x6M<br />
PLDW 書 き 込 むためにデータ をプ リ ロー ド (ページ 4-26) 7MP<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-5<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
表 4-1 命 令 の 参 照 ページ ( 続 き)<br />
ニーモニ ッ ク 概 要 ページ<br />
アーキテ<br />
クチャ a<br />
PLI 命 令 をプ リ ロー ド (ページ 4-26) 7<br />
PUSH、 POP<br />
レジスタをスタックに PUSH、 スタックからレジスタ<br />
を POP<br />
(ページ 4-33)<br />
すべて<br />
QADD、 QDADD、 QDSUB、<br />
QSUB<br />
QADD8、 QADD16、<br />
QASX、 QSUB8、<br />
QSUB16、 QSAX<br />
サチュ レー ト 算 術 演 算 (ページ 4-101) 5E、 x7M<br />
並 列 符 号 付 き サチュ レー ト 算 術 演 算 (ページ 4-106) 6、 x7M<br />
RBIT ビ ッ ト 順 序 を 反 転 (ページ 4-72) T2<br />
REV、 REV16、 REVSH バイ ト 順 序 を 反 転 (ページ 4-72) 6<br />
RFE 例 外 か ら の 復 帰 (ページ 4-35) T2、 x7M<br />
ROR レ ジ ス タ の 右 ロ テー ト (ページ 4-73) すべて<br />
RSB 逆 減 算 (ページ 4-51) すべて<br />
RSC キ ャ リ ー 付 き 逆 減 算 (ページ 4-51) x6M<br />
SADD8、 SADD16、 SASX 並 列 符 号 付 き 算 術 演 算 (ページ 4-106) 6、 x7M<br />
SBC キ ャ リ ー 付 き 減 算 (ページ 4-51) すべて<br />
SBFX、 UBFX 符 号 付 き / 符 号 な し ビ ッ ト フ ィ ール ド の 抽 出 命 令 (ページ 4-116) T2<br />
SDIV 符 号 付 き 除 算 (ページ 4-76) 7M、 7R<br />
SEL APSR の GE フ ラ グに 基 づ く バイ ト の 選 択 (ページ 4-70) 6、 x7M<br />
SETEND メ モ リ ア ク セス 時 のエンデ ィ アン 形 式 を 設 定 する 命 令 (ページ 4-151) 6、 x7M<br />
SEV イベン ト を 設 定 する 命 令 (ページ 4-152) K、 6M<br />
SHADD8、 SHADD16、<br />
SHASX、 SHSUB8、<br />
SHSUB16、 SHSAX<br />
符 号 付 き でバイ ト 、 ハーフ ワー ド 並 列 演 算 (ページ 4-106) 6、 x7M<br />
SMC セキ ュ アモニ ターコール (ページ 4-150) Z<br />
4-6 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
表 4-1 命 令 の 参 照 ページ ( 続 き)<br />
ニーモニ ッ ク 概 要 ページ<br />
アーキテ<br />
クチャ a<br />
SMLAD デュ アル 符 号 付 き 積 和 (ページ 4-93) 6、 x7M<br />
(32
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
表 4-1 命 令 の 参 照 ページ ( 続 き)<br />
ニーモニ ッ ク 概 要 ページ<br />
アーキテ<br />
クチャ a<br />
STREX 排 他 的 レ ジ ス タ ス ト ア (ページ 4-40) 6、 x6M<br />
STREXB、 STREXH 排 他 的 レ ジ ス タ ス ト ア (バイ ト 、 ハーフ ワー ド ) (ページ 4-40) K、 x6M<br />
STREXD 排 他 的 レ ジ ス タ ス ト ア (ダブルワー ド ) (ページ 4-40) K、 x7M<br />
SUB 減 算 (ページ 4-51) すべて<br />
SUBS pc, lr ス タ ッ ク を 行 わない 例 外 か ら の 復 帰 命 令 (ページ 4-56) T2、 x7M<br />
SVC ( 以 前 は SWI) スーパーバイ ザコール (ページ 4-142) すべて<br />
SWP、 SWPB レジスタと メモリ 間 のスワップ (<strong>ARM</strong> のみ) (ページ 4-44) すべて、<br />
x7M<br />
SXTB, SXTB16, SXTH 符 号 付 き 拡 張 (ページ 4-117) 6<br />
SXTAB, SXTAB16,<br />
SXTAH<br />
加 算 オプシ ョ ン 付 き の 符 号 拡 張 (ページ 4-117) 6、 x7M<br />
TBB、 TBH テーブル 分 岐 バイ ト 、 ハーフ ワー ド (ページ 4-131) T2<br />
TEQ、 TST 等 価 テ ス ト 、 テ ス ト (ページ 4-68) すべて<br />
UADD8、 UADD16、 UASX 並 列 符 号 な し 算 術 演 算 (ページ 4-106) 6、 x7M<br />
UDIV 符 号 な し 除 算 (ページ 4-76) 7M、 7R<br />
UHADD8、 UHADD16、<br />
UHASX、 UHSUB8、<br />
UHSUB16、 UHSAX<br />
並 列 符 号 な し 半 演 算 (ページ 4-106) 6、 x7M<br />
UMAAL 符 号 な し 積 和 累 算 long (ページ 4-97) 6、 x7M<br />
(64
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
表 4-1 命 令 の 参 照 ページ ( 続 き)<br />
ニーモニ ッ ク 概 要 ページ<br />
アーキテ<br />
クチャ a<br />
USADA8 符 号 な し 絶 対 差 の 和 の 累 算 (ページ 4-109) 6、 x7M<br />
USAT 符 号 な し サチュ レー ト 演 算 (ページ 4-103) 6、 x6M<br />
USAT16 符 号 な し 並 列 ハーフ ワー ド サチュ レー ト 演 算 (ページ 4-111) 6、 x7M<br />
USUB8、 USUB16、 USAX 並 列 符 号 な し 算 術 演 算 (ページ 4-106) 6、 x7M<br />
UXTB, UXTB16, UXTH 符 号 な し 拡 張 (ページ 4-117) 6<br />
UXTAB, UXTAB16,<br />
UXTAH<br />
任 意 で 加 算 を 伴 う 符 号 な し 拡 張 (ページ 4-117) 6、 x7M<br />
V* 第 5 章 NEON と VFP プログラ ミ ングを 参 照 して 下 さ<br />
い。<br />
WFE、 WFI、 YIELD イベン ト 待 機 、 割 り 込 み 待 機 、 明 け 渡 し (ページ 4-152) T2、 6M<br />
a. アーキテ ク チ ャ 欄 のエン ト リ は 次 の 意 味 を 持 ち ます。<br />
すべて <strong>ARM</strong> アーキテ ク チャのすべてのバージ ョ ンで 使 用 で き る 命 令 です。<br />
5 <strong>ARM</strong>v5T*、 <strong>ARM</strong>v6*、 および <strong>ARM</strong>v7 アーキテ ク チ ャ で 使 用 で き る 命 令 です。<br />
5E<br />
<strong>ARM</strong>v5TE、 <strong>ARM</strong>v6*、 および <strong>ARM</strong>v7 アーキテクチャで 使 用 でき る 命 令 です。<br />
6 <strong>ARM</strong>v6* および <strong>ARM</strong>v7 アーキテクチャで 使 用 でき る 命 令 です。<br />
6M<br />
<strong>ARM</strong>v6-M および <strong>ARM</strong>v7 アーキテ ク チ ャ で 使 用 で き る 命 令 です。<br />
x6M<br />
<strong>ARM</strong>v6-M プ ロ フ ァ イルでは 使 用 で き ない 命 令 です。<br />
7 <strong>ARM</strong>v7 アーキテクチャで 使 用 でき る 命 令 です。<br />
7M<br />
<strong>ARM</strong>v7-M プ ロ フ ァ イルで 使 用 で き る 命 令 です。<br />
x7M<br />
<strong>ARM</strong>v6-M と <strong>ARM</strong>v7-M プ ロ フ ァ イルでは 使 用 で き ない 命 令 です。<br />
7R<br />
<strong>ARM</strong>v7-R プロ フ ァ イルで 使 用 でき る 命 令 です。<br />
7MP<br />
マルチプロセス 拡 張 を 実 装 した <strong>ARM</strong>v7 アーキテクチャで 使 用 でき る 命 令 です。<br />
EE<br />
<strong>ARM</strong> アーキテクチャの ThumbEE バリアントで 使 用 できる 命 令 です。<br />
J<br />
<strong>ARM</strong>v5TEJ、 <strong>ARM</strong>v6*、 および <strong>ARM</strong>v7 アーキテクチャで 使 用 でき る 命 令 です。<br />
K<br />
<strong>ARM</strong>v6K および <strong>ARM</strong>v7 アーキテクチャで 使 用 でき る 命 令 です。<br />
T<br />
<strong>ARM</strong>v4T、 <strong>ARM</strong>v5T*、 <strong>ARM</strong>v6*、 および <strong>ARM</strong>v7 アーキテクチャで 使 用 でき る 命 令 です。<br />
T2<br />
<strong>ARM</strong>v6T2 以 上 のアーキテ ク チ ャ で 使 用 で き る 命 令 です。<br />
XScale <strong>ARM</strong> アーキテクチャの XScale バージ ョ ンで 使 用 で き る 命 令 です。<br />
Z<br />
Security Extensions が 実 装 さ れてい る 場 合 に 使 用 で き る 命 令 です。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-9<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.2 メモリアクセス 命 令<br />
こ のセ ク シ ョ ンは 以 下 のサブセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「ア ド レ ス 境 界 調 整 」 (ページ 4-11)<br />
すべての メ モ リ ア ク セス 命 令 に 該 当 する、 境 界 調 整 の 考 慮 事 項 です。<br />
• 「LDR と STR (イ ミディエートオフセッ ト)」 (ページ 4-12)<br />
イ ミディエートオフセッ ト、 プレインデクスイ ミディエートオフセッ<br />
ト、 またはポストインデクスイミディエートオフセッ トを 使 ったロード<br />
とストア。<br />
• 「LDR と STR (レジスタオフセッ ト)」 (ページ 4-16)<br />
レジスタオフセッ ト、 プレインデクスレジスタオフセッ ト、 またはポス<br />
トインデクスレジスタオフセットを 使 ったロードとストア。<br />
• 「LDR と STR (ユーザモード)」 (ページ 4-18)<br />
ユーザモー ド でのロード と ス ト ア。<br />
• 「LDR (pc 相 対 )」 (ページ 4-21)<br />
レジスタロード 命 令 です。 アドレスは、 プログラムカウンタからのオフ<br />
セッ トです。<br />
• 「ADR」 (ページ 4-24)<br />
プ ロ グ ラ ム 相 対 ア ド レ ス ま たはレ ジ ス タ 相 対 ア ド レ ス を ロー ド を 実 行 す<br />
る 命 令 です。<br />
• 「PLD、 PLDW、 PLI」 (ページ 4-26)<br />
ア ド レ スのプ リ ロー ド を 実 行 する 命 令 です。<br />
• 「LDM、 STM」 (ページ 4-29)<br />
多 重 レ ジ ス タ ロー ド / ストア 命 令 です。<br />
• 「PUSH および POP」 (ページ 4-33)<br />
Lo レジスタ と lr (オプシ ョ ン) を ス タ ッ ク にプ ッ シ ュする 命 令 です。<br />
Lo レジスタ と pc (オプシ ョ ン) を ス タ ッ ク から ポ ッ プする 命 令 です。<br />
• 「RFE」 (ページ 4-35)<br />
例 外 か ら 復 帰 する 命 令 です。<br />
• 「SRS」 (ページ 4-38)<br />
4-10 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
復 帰 状 態 を ス ト アする 命 令 です。<br />
• 「LDREX と STREX」 (ページ 4-40)<br />
排 他 的 レ ジ ス タ ロー ド / ストア 命 令 です。<br />
• 「CLREX」 (ページ 4-43)<br />
排 他 を ク リ アする 命 令 です。<br />
• 「SWP と SWPB」 (ページ 4-44)<br />
レジス タ と メ モ リ 間 のデータ ス ワ ッ プ 命 令 です。<br />
注<br />
LDR 疑 似 命 令 も あ り ます (「LDR 疑 似 命 令 」 (ページ 4-170) を 参 照 )。 この 疑 似<br />
命 令 を アセンブルする こ と に よ って、 LDR 命 令 、 MOV 命 令 、 ま たは MVN 命 令 が 生<br />
成 されます。<br />
4.2.1 ア ド レス 境 界 調 整<br />
ほとんどの 場 合 、 4 バイ ト 転 送 のアドレスは 4 バイ ト 境 界 で、 2 バイ ト 転 送 の<br />
アドレスは 2 バイ ト 境 界 で 整 列 されている 必 要 があり ます。 <strong>ARM</strong>v6T2 以 降 で<br />
は、 非 境 界 整 列 ア ク セ スが 許 可 さ れます。 <strong>ARM</strong>v7 以 降 では、 非 境 界 整 列 ア ク<br />
セスが 義 務 付 け られています (デフ ォル ト )。<br />
<strong>ARM</strong>v6 以 前 では、 シ ス テムにシ ス テム コ プ ロ セ ッ サ (cp15) が 存 在 する 場 合<br />
に 境 界 調 整 チェ ッ ク を イ ネーブルにで き ます。 境 界 調 整 チェ ッ ク が イ ネーブ<br />
ル さ れてい る 場 合 、 ワー ド 境 界 で 整 列 さ れていない 32 ビット 転 送 が 行 われる<br />
と 、 境 界 調 整 例 外 が 発 生 し ます。<br />
すべてのア ク セスが 境 界 調 整 さ れてい る 場 合 、 コ マン ド ラ イ ンオプシ ョ ン<br />
--no_unaligned_access を 使 って 境 界 調 整 されていないラ イブラ リ 関 数 への リ ン<br />
クを 避 けることができます。<br />
システムにシステムコプロセッサ (cp15) が 存 在 しないか、 境 界 調 整 チェッ<br />
ク がデ ィ セーブル さ れてい る 場 合 、 以 下 の よ う にな り ます。<br />
• STR では、 指 定 されたア ド レ スが 4 の 倍 数 に 切 り 捨 て られます。<br />
• LDR の 場 合 :<br />
1. 指 定 さ れたア ド レ スが 4 の 倍 数 に 切 り 捨 て られます。<br />
2. 切 り 捨 て 後 のアドレスから 4 バイ トのデータがロード されます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-11<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
3. ロー ド さ れたデータ が、 ア ド レ スのビ ッ ト [1:0] に 応 じ て 1 バイ ト、<br />
2 バイ ト、 または 3 バイ ト 分 右 にロテート されます。<br />
こ の 場 合 、 リ ト ルエンデ ィ アン メ モ リ シ ス テムでは、 指 定 さ れたバ イ ト<br />
がレジスタの 最 下 位 バイ トに 入 れられます。<br />
ビッグエンディアンメモリシステムでは、 指 定 されたバイトが 以 下 のよ<br />
うにレジスタに 入 れられます。<br />
— アドレスのビッ ト 0 が 0 の 場 合 、 レジス タのビ ッ ト [31:24] に 入 れ<br />
られます。<br />
— アドレスのビッ ト 0 が 1 の 場 合 、 レジス タのビ ッ ト [15:8] に 入 れら<br />
れます。<br />
4.2.2 LDR と STR (イ ミディ エートオフセッ ト)<br />
イ ミディエートオフセッ ト、 プレインデクスイ ミディエートオフセッ ト、 ま<br />
たはポス ト インデク ス イ ミ ディ エー ト オフセッ ト を 使 ったロード と ス ト ア。<br />
構 文<br />
op{type}{cond} Rt, [Rn {, #offset}]<br />
op{type}{cond} Rt, [Rn, #offset]!<br />
op{type}{cond} Rt, [Rn], #offset<br />
opD{cond} Rt, Rt2, [Rn {, #offset}]<br />
opD{cond} Rt, Rt2, [Rn, #offset]!<br />
opD{cond} Rt, Rt2, [Rn], #offset<br />
; immediate offset<br />
; pre-indexed<br />
; post-indexed<br />
; immediate offset, doubleword<br />
; pre-indexed, doubleword<br />
; post-indexed, doubleword<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
type<br />
次 のいずれかを 指 定 でき ます。<br />
LDR レジスタロード<br />
STR レジスタス トア<br />
次 のいずれかを 指 定 でき ます。<br />
B 符 号 な しバイ ト (ロー ド 時 に 32 ビットにゼロ 拡 張 )<br />
SB 符 号 付 きバイ ト (LDR のみ。 32 ビ ッ ト に 符 号 拡 張 )<br />
H<br />
SH<br />
符 号 な しハーフ ワー ド (ロー ド 時 に 32 ビットにゼロ 拡<br />
張 )<br />
符 号 付 きハーフ ワー ド (LDR のみ。 32 ビ ッ ト に 符 号 拡<br />
張 )<br />
4-12 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
- 省 略 (ワー ド )<br />
cond<br />
Rt<br />
Rn<br />
offset<br />
Rt2<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
ロード またはス ト アするレジスタを 指 定 します。<br />
メ モ リ ア ド レ スのベース と な る レ ジ ス タ を 指 定 し ます。<br />
オフセ ッ ト を 指 定 し ます。 offset が 省 略 される と、 ア ド レ スは Rn<br />
の 内 容 と な り ます。<br />
ダブルワードのロード / ス ト アで 使 用 する 追 加 のレ ジ ス タ を 指 定<br />
します。<br />
命 令 セ ッ ト やアーキテ ク チャ に よ っては、 一 部 のオプシ ョ ン を 使 用 で き ない<br />
場 合 があ り ます。 詳 細 については、 「オフセ ッ ト の 範 囲 と アーキテ クチャ」<br />
(ページ 4-14) を 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-13<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
オフセッ トの 範 囲 とアーキテクチャ<br />
表 4-2 はオフセ ッ ト の 範 囲 と こ れら の 命 令 の 使 用 可 否 を 示 し ます。<br />
表 4-2 オフセッ ト とアーキテクチャ、 LDR/STR、 ワード、ハーフワード、バイト<br />
命 令<br />
イミディエー<br />
トオフセット<br />
プレインデクス<br />
ポス ト インデ<br />
クス<br />
アーキテ<br />
クチャ<br />
<strong>ARM</strong>、 ワードまたはバイト a –4095 ~ 4095 –4095 ~ 4095 –4095 ~ 4095 すべて<br />
<strong>ARM</strong>、 符 号 付 きバイ ト 、 ハーフ ワー ド 、<br />
符 号 付 きハーフ ワー ド<br />
–255 ~ 255 –255 ~ 255 –255 ~ 255 すべて<br />
<strong>ARM</strong>、 ダブルワード –255 ~ 255 –255 ~ 255 –255 ~ 255 v5TE +<br />
32 ビッ ト Thumb、 ワード、ハーフワー –255 ~ 4095 –255 ~ 255 –255 ~ 255 v6T2、 v7<br />
符 号 付 きバイ ト a<br />
ド、 符 号 付 きハーフワード、 バイ ト、<br />
32 ビッ ト Thumb、 ダブルワード –1020 ~ 1020 c –1020 ~ 1020 c –1020 ~ 1020 c v6T2、 v7<br />
16 ビッ ト Thumb、 ワード b 0 ~ 124 c 該 当 な し 該 当 な し すべての T<br />
16 ビッ ト Thumb、 符 号 なしハーフワー 0 ~ 62 d 該 当 な し 該 当 な し すべての T<br />
ド b<br />
16 ビッ ト Thumb、 符 号 なしバイト b 0 ~ 31 該 当 な し 該 当 な し すべての T<br />
16 ビッ ト Thumb、 ワード、Rn は r13 e 0 ~ 1020 c 該 当 な し 該 当 な し すべての T<br />
16 ビッ ト ThumbEE、 ワード b –28 ~ 124 c 該 当 な し 該 当 な し T-2EE<br />
16 ビッ ト ThumbEE、 ワード、Rn は r9 e 0 ~ 252 c 該 当 な し 該 当 な し T-2EE<br />
16 ビッ ト ThumbEE、 ワード、Rn は r10 e 0 ~ 124 c 該 当 な し 該 当 な し T-2EE<br />
a. ワードのロードでは Rt に pc を 指 定 できます。 pc (プログラムカウンタ) へのロードを 実 行 すると、 ロードされた<br />
ア ド レ スにあ る 命 令 への 分 岐 が 発 生 し ます。 <strong>ARM</strong>v4 では、 ロード されたア ド レ スのビ ッ ト [1:0] は 0b00 になって<br />
い る 必 要 があ り ます。 <strong>ARM</strong>v5 以 降 のバージ ョ ンでは、 ビ ッ ト [1:0] が 0b10 であってはな り ません。 ビッ ト [0] が 1<br />
になってい る 場 合 、 Thumb 状 態 で 実 行 が 継 続 さ れます。 そ う でなければ、 <strong>ARM</strong> 状 態 で 継 続 さ れます。<br />
b. Rt と Rn には r0 ~ r7 の 範 囲 のレジス タ を 指 定 する 必 要 があ り ます。<br />
c. 4 の 倍 数<br />
d. 必 ず 2 の 倍 数<br />
e. Rt には、 r0 ~ r7 の 範 囲 のレジス タ を 指 定 する 必 要 があ り ます。<br />
4-14 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
ダブルワー ド レジス タの 制 約 条 件<br />
Thumb-2 命 令 の 場 合 、 Rt または Rt2 に sp または pc は 指 定 でき ません。<br />
<strong>ARM</strong> 命 令 には、 以 下 の 制 約 条 件 が 適 用 さ れます。<br />
• Rt には 偶 数 番 号 のレジス タ を 指 定 する 必 要 があ り ます。<br />
• Rt に lr は 指 定 でき ません。<br />
• r12 を Rt に 使 用 し ないこ と を 強 く お 勧 めし ます。<br />
• Rt2 は R(t + 1). でなければな り ません。<br />
サンプル<br />
LDR r8,[r10] ; loads r8 from the address in r10.<br />
LDRNE r2,[r5,#960]! ; (conditionally) loads r2 from a word<br />
; 960 bytes above the address in r5, and<br />
; increments r5 by 960.<br />
STR r2,[r9,#consta-struc] ; consta-struc is an expression evaluating<br />
; to a constant in the range 0-4095.<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-15<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.2.3 LDR と STR (レジスタオフセッ ト)<br />
レジスタオフセッ ト、 プレインデクスレジスタオフセッ ト、 またはポス ト イ<br />
ンデク スレジス タオフセッ ト を 使 ったロード と ス ト ア。<br />
構 文<br />
op{type}{cond} Rt, [Rn, +/-Rm {, shift}]<br />
; register offset<br />
op{type}{cond} Rt, [Rn, +/-Rm {, shift}]! ; pre-indexed<br />
op{type}{cond} Rt, [Rn], +/-Rm {, shift}<br />
opD{cond} Rt, Rt2, [Rn, +/-Rm {, shift}]<br />
; post-indexed<br />
; register offset, doubleword<br />
opD{cond} Rt, Rt2, [Rn, +/-Rm {, shift}]! ; pre-indexed, doubleword<br />
opD{cond} Rt, Rt2, [Rn], +/-Rm {, shift}<br />
; post-indexed, doubleword<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
type<br />
cond<br />
Rt<br />
Rn<br />
Rm<br />
shift<br />
次 のいずれかを 指 定 でき ます。<br />
LDR レジスタロード<br />
STR レジスタス トア<br />
次 のいずれかを 指 定 でき ます。<br />
B 符 号 な しバイ ト (ロー ド 時 に 32 ビットにゼロ 拡 張 )<br />
SB 符 号 付 きバイ ト (LDR のみ。 32 ビ ッ ト に 符 号 拡 張 )<br />
H 符 号 な しハーフ ワー ド (ロー ド 時 に 32 ビットにゼロ 拡<br />
張 )<br />
SH 符 号 付 きハーフ ワー ド (LDR のみ。 32 ビ ッ ト に 符 号 拡<br />
張 )<br />
- 省 略 (ワー ド )<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
ロー ド ま たはス ト アする レ ジ ス タ を 指 定 し ます。<br />
メモリアドレスのベースとなるレジスタを 指 定 します。<br />
オフセ ッ ト と し て 使 用 さ れる 値 を 保 持 する レ ジ ス タ を 指 定 し ま<br />
す。 Rm に r15 は 指 定 でき ません。 –Rm は Thumb コードでは 使 用 でき<br />
ません。<br />
任 意 に 指 定 で き る シ フ ト です。<br />
4-16 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
Rt2<br />
ダブルワードのロード / ス ト アで 使 用 する 追 加 のレ ジ ス タ を 指 定<br />
します。<br />
命 令 セ ッ ト やアーキテ ク チャ に よ っては、 一 部 のオプシ ョ ン を 使 用 で き ない<br />
場 合 があ り ます。 詳 細 については、 「オフセ ッ ト レジス タ と シフ ト オプシ ョ<br />
ン」 を 参 照 して 下 さい。<br />
オフセッ トレジスタとシフ トオプション<br />
表 4-3 はオフセ ッ ト の 範 囲 と これらの 命 令 の 使 用 可 否 を 示 し ます。<br />
表 4-3 オプシ ョ ンとアーキテクチャ、 LDR/STR (レジスタオフセッ ト)<br />
命 令 +/–Rm a シフト<br />
アーキテ<br />
クチャ<br />
<strong>ARM</strong>、 ワードまたはバイト b +/–Rm LSL #0-31 LSR #1-32 すべて<br />
ASR #1-32 ROR #1-31 RRX<br />
<strong>ARM</strong>、 符 号 付 きバイ ト 、 ハーフ ワー ド 、 符 号 付<br />
きハーフワード<br />
+/–Rm 該 当 な し すべて<br />
<strong>ARM</strong>、 ダブルワード +/–Rm 該 当 な し v5TE +<br />
32 ビッ ト Thumb、 ワード、ハーフワード、 符 号 +Rm LSL #0-3 v6T2、 v7<br />
付 きハーフ ワー ド 、 バイ ト 、 符 号 付 きバイ ト b<br />
32 ビッ ト Thumb、 ダブルワード +Rm 該 当 な し v6T2、 v7<br />
16 ビッ ト Thumb、 すべて c +Rm 該 当 な し すべての<br />
T<br />
16 ビッ ト ThumbEE、 ワード b +Rm LSL #2 ( 必 須 ) T-2EE<br />
16 ビッ ト ThumbEE、 ハーフ ワー ド 、 符 号 付 き +Rm LSL #1 ( 必 須 ) T-2EE<br />
ハーフ ワー ド b<br />
16 ビッ ト ThumbEE、 バイト、 符 号 付 きバイト b +Rm 該 当 な し T-2EE<br />
a. +/–Rm となっているところでは、 –Rm、 +Rm、 または Rm を 使 用 できます。 +Rm となっているところでは、 –Rm<br />
を 使 用 できません。<br />
b. ワードのロードでは Rt に pc を 指 定 できます。 pc (プログラムカウンタ) へのロードを 実 行 すると、 ロードされた<br />
ア ド レ スにあ る 命 令 への 分 岐 が 発 生 し ます。 <strong>ARM</strong>v4 では、 ロード されたア ド レスのビ ッ ト [1:0] は 0b00 になって<br />
いる 必 要 があ り ます。 <strong>ARM</strong>v5 以 降 のバージ ョ ンでは、 ビ ッ ト [1:0] が 0b10 であってはな り ません。 ビッ ト [0] が 1<br />
にな ってい る 場 合 、 Thumb 状 態 で 実 行 が 継 続 さ れます。 そ う でなければ、 <strong>ARM</strong> 状 態 で 継 続 さ れます。<br />
c. Rt、 Rn、 および Rm はどれも r0-r7 の 範 囲 にし ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-17<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
ダブルワー ド レジス タの 制 約 条 件<br />
Thumb-2 命 令 の 場 合 、 Rt または Rt2 に sp または pc は 指 定 でき ません。<br />
<strong>ARM</strong> 命 令 には、 以 下 の 制 約 条 件 が 適 用 さ れます。<br />
• Rt には 偶 数 番 号 のレ ジ ス タ を 指 定 する 必 要 があ り ます。<br />
• Rt に lr は 指 定 でき ません。<br />
• r12 を に 使 用 し ないこ と を 強 く お 勧 めし ます。 Rt<br />
• Rt2 は でなければな り ません。 R(t + 1).<br />
4.2.4 LDR と STR (ユーザモー ド )<br />
ユーザモードのアクセス 権 でバイ ト、 ハーフワード、 またはワードをロード /<br />
ストアします。<br />
これらの 命 令 が 特 権 モード で 実 行 される と、 ユーザモード で 実 行 し た と き と<br />
同 じ 制 約 条 件 で メ モ リ にア ク セス し ます。<br />
これらの 命 令 は、 ユーザモードでも 通 常 のメモリアクセスとまったく 同 様 に<br />
動 作 し ます。<br />
構 文<br />
op{type}T{cond} Rt, [Rn {, #offset}]<br />
op{type}T{cond} Rt, [Rn] {, #offset}<br />
; immediate offset (Thumb-2 only)<br />
; post-indexed (<strong>ARM</strong> only)<br />
op{type}T{cond} Rt, [Rn], +/-Rm {, shift} ; post-indexed (register) (<strong>ARM</strong> only)<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
type<br />
次 のいずれかを 指 定 でき ます。<br />
LDR レジスタロード<br />
STR レジスタス トア<br />
次 のいずれかを 指 定 でき ます。<br />
B 符 号 な しバイ ト (ロー ド 時 に 32 ビットにゼロ 拡 張 )<br />
SB 符 号 付 きバイ ト (LDR のみ。 32 ビ ッ ト に 符 号 拡 張 )<br />
H 符 号 な しハーフ ワー ド (ロー ド 時 に 32 ビットにゼロ 拡<br />
張 )<br />
SH 符 号 付 きハーフ ワー ド (LDR のみ。 32 ビ ッ ト に 符 号 拡<br />
張 )<br />
- 省 略 (ワー ド )<br />
4-18 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
cond<br />
Rt<br />
Rn<br />
offset<br />
Rm<br />
shift<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
ロード またはス ト アするレジスタを 指 定 します。<br />
メ モ リ ア ド レ スのベース と な る レ ジ ス タ を 指 定 し ます。<br />
オフセ ッ ト を 指 定 し ます。 オフセ ッ ト を 指 定 し なかっ た 場 合 、 ア<br />
ドレスは Rn 内 の 値 にな り ます。<br />
オフセ ッ ト と し て 使 用 さ れる 値 を 保 持 する レ ジ ス タ を 指 定 し ま<br />
す。 Rm に r15 は 指 定 でき ません。<br />
任 意 に 指 定 で き る シフ ト です。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-19<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
オフセッ トの 範 囲 とアーキテクチャ<br />
表 4-2 (ページ 4-14) はオフセ ッ ト の 範 囲 と こ れら の 命 令 の 使 用 可 否 を 示 し ま<br />
す。<br />
表 4-4 オフセッ ト とアーキテクチャ、 LDR/STR (ユーザモー ド )<br />
命 令<br />
イミディエート<br />
オフセッ ト<br />
ポス ト インデク<br />
ス<br />
+/–Rm a<br />
シフ ト<br />
アーキ<br />
テク<br />
チャ<br />
<strong>ARM</strong>、 ワード、バイト 該 当 な し –4095 ~ 4095 +/–Rm LSL #0-31 すべて<br />
LSR #1-32<br />
ASR #1-32<br />
ROR #1-31<br />
RRX<br />
<strong>ARM</strong>、 符 号 付 きバイ ト 、 ハーフ<br />
ワード、 符 号 付 きハーフワード<br />
32 ビッ ト Thumb、 ワード、ハー<br />
フ ワー ド 、 符 号 付 きハーフ ワー<br />
ド 、 バイ ト 、 符 号 付 きバイ ト<br />
該 当 な し –255 ~ 255 +/–Rm 該 当 な し すべて<br />
0 ~ 255 該 当 な し 該 当 な し v6T2、<br />
v7<br />
a. –Rm、 +Rm、 または Rm を 使 用 できます。<br />
4-20 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.2.5 LDR (pc 相 対 )<br />
レジスタロード 命 令 です。 アドレスは、 プログラムカウンタからのオフセッ<br />
トです。<br />
注<br />
「 疑 似 命 令 」 (ページ 4-165) も 参 照 して 下 さい。<br />
構 文<br />
LDR{type}{cond}{.W} Rt, label<br />
LDRD{cond} Rt, Rt2, label<br />
; Doubleword<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
type<br />
cond<br />
次 のいずれかを 指 定 でき ます。<br />
B 符 号 な しバイ ト (ロー ド 時 に 32 ビ ッ ト にゼ ロ 拡 張 )<br />
SB 符 号 付 きバイ ト (LDR のみ。 32 ビ ッ ト に 符 号 拡 張 )<br />
H 符 号 な しハーフ ワー ド (ロー ド 時 に 32 ビットにゼロ 拡<br />
張 )<br />
SH 符 号 付 きハーフ ワー ド (LDR のみ。 32 ビ ッ ト に 符 号 拡<br />
張 )<br />
- 省 略 (ワー ド )<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
.W 任 意 に 指 定 で き る 幅 指 定 子 を 指 定 し ます。 詳 細 については、<br />
「Thumb-2 での LDR (pc 相 対 )」 (ページ 4-22) を 参 照 して 下 さ<br />
い。<br />
Rt<br />
Rt2<br />
label<br />
ロード またはス ト アするレジスタを 指 定 します。<br />
2 番 目 に ロー ド ま たはス ト アする レ ジ ス タ を 指 定 し ます。<br />
プログラム 相 対 式 を 指 定 します。 詳 細 については、 「レジスタ 相<br />
対 式 と プ ロ グ ラ ム 相 対 式 」 (ページ 3-39) を 参 照 して 下 さい。<br />
label は 現 在 の 命 令 か ら 限 定 さ れた 距 離 にあ る 必 要 があ り ます。<br />
詳 細 については、 「オフセ ッ ト の 範 囲 と アーキテ クチャ」 (ペー<br />
ジ 4-22) を 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-21<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
オフセッ トの 範 囲 とアーキテクチャ<br />
アセンブラは、 プログラムカウンタからオフセッ トを 算 出 します。 label が 範<br />
囲 外 であ る 場 合 、 アセンブ ラ はエ ラ ーを 生 成 し ます。<br />
表 4-5 は ラベル と 現 在 の 命 令 と の 間 の 可 能 なオフセ ッ ト を 示 し ます。<br />
表 4-5 pc 相 対 オ フ セ ッ ト<br />
命 令<br />
オフセッ ト 範<br />
囲<br />
アーキテクチャ<br />
<strong>ARM</strong> LDR、 LDRB、 LDRSB、 LDRH、 LDRSH a<br />
+/– 4095 すべて<br />
<strong>ARM</strong> LDRD +/– 255 v5TE +<br />
32 ビッ ト Thumb LDR、 LDRB、 LDRSB、 LDRH、 +/– 4095 v6T2、 v7<br />
LDRSH a<br />
32 ビッ ト Thumb LDRD +/– 1020 b<br />
v6T2、 v7<br />
16 ビッ ト Thumb LDR c<br />
0-1020 b すべての T<br />
a. ワードのロードでは Rt に pc を 指 定 できます。 pc (プロ グ ラ ムカ ウ ン タ) へのロー<br />
ド を 実 行 する と 、 ロー ド さ れたア ド レ スにあ る 命 令 への 分 岐 が 発 生 し ます。 <strong>ARM</strong>v4<br />
では、 ロード されたア ド レスのビ ッ ト [1:0] は 0b00 になってい る 必 要 があ り ます。<br />
<strong>ARM</strong>v5 以 降 のバージ ョ ンでは、 ビ ッ ト [1:0] が 0b10 であってはな り ません。ビッ ト<br />
[0] が 1 になっている 場 合 、 Thumb 状 態 で 実 行 が 継 続 さ れます。 そ う でなければ、<br />
<strong>ARM</strong> 状 態 で 継 続 さ れます。<br />
b. (4 の 倍 数 で 指 定 し て 下 さい)<br />
c. Rt には、 r0 ~ r7 の 範 囲 のレジス タ を 指 定 する 必 要 があ り ます。 バイ ト、 ハーフワー<br />
ド、 ダブルワードの 16 ビッ ト 命 令 はありません。<br />
Thumb-2 での LDR (pc 相 対 )<br />
.W 幅 指 定 子 を 使 用 し て、 LDR で Thumb-2 コードの 32 ビ ッ ト 命 令 を 生 成 する こ<br />
とができます。LDR.W が、 16 ビット LDR 命 令 を 使 用 でき る ターゲ ッ ト の 場 合 で<br />
も、 常 に 32 ビ ッ ト 命 令 を 生 成 し ます。<br />
参 考 と し て、 32 ビット Thumb-2 の LDR 命 令 が 使 用 でき る ターゲ ッ ト で 失 敗 が<br />
発 生 し て も、.W 指 定 な し の LDR が 常 に 16 ビッ ト Thumb コードの 命 令 を 生 成 し<br />
ます。。<br />
ダブルワー ド レジス タの 制 約 条 件<br />
Thumb-2 命 令 の 場 合 、 Rt または Rt2 に sp または pc は 指 定 でき ません。<br />
4-22 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
<strong>ARM</strong> 命 令 には、 以 下 の 制 約 条 件 が 適 用 さ れます。<br />
• Rt には 偶 数 番 号 のレジス タ を 指 定 する 必 要 があ り ます。<br />
• Rt に lr は 指 定 でき ません。<br />
• r12 を に 使 用 し ないこ と を 強 く お 勧 めし ます。 Rt<br />
• Rt2 は でなければな り ません。 R(t + 1).<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-23<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.2.6 ADR<br />
ADR は 即 値 を pc 値 に 加 算 し、 その 結 果 をデス テ ィ ネーシ ョ ン レ ジ ス タ に 書 き<br />
込 みます。<br />
構 文<br />
ADR{cond}{.W} Rd,label<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
.W 任 意 に 指 定 で き る 幅 指 定 子 を 指 定 し ます。 詳 細 については、<br />
「Thumb-2 の ADR」 (ページ 4-25) を 参 照 して 下 さい。<br />
Rd<br />
label<br />
ロー ド する レ ジ ス タ を 指 定 し ます。<br />
プログラム 相 対 式 を 指 定 します。 詳 細 については、 「レジスタ 相<br />
対 式 と プ ロ グ ラ ム 相 対 式 」 (ページ 3-39) を 参 照 して 下 さい。<br />
label は 現 在 の 命 令 か ら 限 定 さ れた 距 離 にあ る 必 要 があ り ます。<br />
詳 細 については、 「オフセ ッ ト の 範 囲 と アーキテ クチャ」 (ペー<br />
ジ 4-25) を 参 照 して 下 さい。<br />
使 用 法<br />
ADR は、 ア ド レ スがプ ロ グ ラ ム 相 対 ま たはレ ジ ス タ 相 対 であ る ため、 位 置 非 依<br />
存 コードを 生 成 します。<br />
より 広 範 囲 の 有 効 なアドレスをアセンブルするには、ADRL 疑 似 命 令 を 使 用 し<br />
ます (「ADRL 疑 似 命 令 」 (ページ 4-166) を 参 照 )。<br />
label がプログラ ム 相 対 である 場 合 は、 ADR 命 令 と 同 じ アセンブ ラ 領 域 内 のア<br />
ド レ ス を 指 定 する 必 要 があ り ます (「AREA」 (ページ 7-81) を 参 照 )。<br />
BX または BLX 命 令 の ターゲ ッ ト を 生 成 する ために ADR を 使 用 する と きは、 ター<br />
ゲッ トに Thumb 命 令 が 含 まれてい る 場 合 、 そのア ド レ スの Thumb ビッ ト<br />
(ビ ッ ト 0) を 設 定 する 必 要 があ り ます。<br />
4-24 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
オフセッ トの 範 囲 とアーキテクチャ<br />
アセンブラは、 プログラムカウンタからオフセッ ト を 算 出 します。 label が 範<br />
囲 外 であ る 場 合 、 アセンブ ラ はエ ラーを 生 成 し ます。<br />
表 4-5 (ページ 4-22) はラベル と 現 在 の 命 令 と の 間 の 可 能 なオフセ ッ ト を 示 し<br />
ます。<br />
表 4-6 pc 相 対 オ フ セ ッ ト<br />
命 令 オ フ セ ッ ト 範 囲 アーキテ ク チ ャ<br />
<strong>ARM</strong> ADR<br />
「Operand2 の 定 数 」 (ページ 4-48) を 参 照<br />
して 下 さい。<br />
すべて<br />
32 ビッ ト Thumb<br />
ADR<br />
+/– 4095 v6T2、 v7<br />
16 ビッ ト Thumb<br />
ADR a<br />
0-1020 b<br />
すべての T<br />
a. Rd には、 r0 ~ r7 の 範 囲 のレジス タ を 指 定 する 必 要 があ り ます。<br />
b. (4 の 倍 数 で 指 定 し て 下 さい)<br />
Thumb-2 の ADR<br />
.W 幅 指 定 子 を 使 用 し て、 ADR で Thumb-2 コードの 32 ビ ッ ト 命 令 を 生 成 する こ<br />
とができます。.W を 指 定 して ADR 命 令 を 使 用 する 場 合 、 16 ビット 命 令 でアド<br />
レスを 生 成 できる 場 合 でも、 常 に 32 ビッ ト 命 令 が 生 成 されます。<br />
参 考 と し て、 .W 指 定 な し の ADR には、 常 に 16 ビッ トの Thumb コードが 生 成 さ<br />
れます。 ただ し、 生 成 さ れた 16 ビッ ト 命 令 では、32 ビット Thumb-2 ADD 命 令<br />
で 生 成 でき る ア ド レ ス を 生 成 でき ない 場 合 があ り ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-25<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.2.7 PLD、 PLDW、 PLI<br />
データ と 命 令 をプ リ ロー ド する 命 令 です。 プロセッサは、 アドレスからデー<br />
タ ま たは 命 令 の ロー ド が 実 行 さ れる こ と を メ モ リ シ ス テムに 事 前 に 通 知 する<br />
ことができます。<br />
構 文<br />
PLtype{cond} [Rn {, #offset}]<br />
PLtype{cond} [Rn, +/-Rm {, shift}]<br />
PLtype{cond} label<br />
各 パ ラ メ ータには 以 下 の 意 味 があ り ます。<br />
type<br />
以 下 のいずれかを 指 定 で き ます。<br />
D データ ア ド レ ス<br />
DW 書 き 込 むためのデータアドレス<br />
I 命 令 ア ド レ ス<br />
構 文 で label が 指 定 さ れてい る 場 合 、 type を DW にする こ と はでき<br />
ません。<br />
cond<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
注<br />
cond を 指 定 でき るのは、 Thumb-2 コードで、 前 に IT 命 令 を 使 用<br />
した 場 合 のみです。 この 命 令 は、 <strong>ARM</strong> では 無 条 件 命 令 なので、<br />
cond を 使 用 しないで 下 さい。<br />
Rn<br />
offset<br />
Rm<br />
shift<br />
label<br />
メモリアドレスのベースとなるレジスタを 指 定 します。<br />
イミディエートオフセットを 指 定 します。 オフセッ ト を 指 定 しな<br />
かった 場 合 、 アド レスは Rn 内 の 値 にな り ます。<br />
オフセ ッ ト と し て 使 用 さ れる 値 を 保 持 する レ ジ ス タ を 指 定 し ま<br />
す。 Rm に r15 は 指 定 でき ません。 Thumb 命 令 の 場 合 、 Rm に r13 も<br />
指 定 で き ません。<br />
任 意 に 指 定 で き る シ フ ト です。<br />
プログラム 相 対 式 を 指 定 します。 詳 細 については、 「レジスタ 相<br />
対 式 と プ ロ グ ラ ム 相 対 式 」 (ページ 3-39) を 参 照 して 下 さい。<br />
4-26 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
オフセッ トの 範 囲<br />
このオフセッ トは、 プリ ロードが 発 生 する 前 に Rn の 値 に 適 用 されます。 その<br />
結 果 は、 プ リ ロー ド 用 の メ モ リ ア ド レ ス と し て 使 用 さ れます。 使 用 で き る オ<br />
フセッ ト の 範 囲 を 以 下 に 示 し ます。<br />
• <strong>ARM</strong> 命 令 : –4095 ~ +4095<br />
• Thumb-2 命 令 : -255 ~ +4095 (Rn が r15 でない 場 合 )<br />
• Thumb-2 命 令 : -4095 ~ +4095 (Rn が r15 である 場 合 )<br />
アセンブラは、 プログラムカウンタからオフセッ ト を 算 出 します。 label が 範<br />
囲 外 であ る 場 合 、 アセンブ ラ はエ ラーを 生 成 し ます。<br />
レジスタオフセッ トまたはシフ トレジスタオフセッ ト<br />
<strong>ARM</strong> では、 Rm の 値 は Rn の 値 に 対 し て 加 算 または 減 算 されます。 Thumb-2 で<br />
は、 Rm の 値 は Rn の 値 に 加 算 でき ますが、 減 算 はでき ません。 この 結 果 は、 プ<br />
リロード 用 のメモリアドレスとして 使 用 されます。<br />
可 能 なシフ ト の 範 囲 を 以 下 に 示 し ます。<br />
• Thumb-2 命 令 : LSL #0 ~ #3<br />
• <strong>ARM</strong> 命 令 : 以 下 のいずれかの 範 囲<br />
— LSL #0 ~ #31<br />
— LSR #1 ~ #32<br />
— ASR #1 ~ #32<br />
— ROR #1 ~ #31<br />
— RRX<br />
プ リ ロー ド 用 のア ド レス 境 界 調 整<br />
プ リ ロー ド 命 令 では、 境 界 調 整 チェ ッ ク は 実 行 さ れません。<br />
アーキテクチャ<br />
<strong>ARM</strong> PLD は <strong>ARM</strong>v5TE 以 降 で 使 用 で き ます。<br />
32 ビッ ト Thumb PLD は <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
PLDW を 使 用 でき るのは、 マルチプロセス 拡 張 を 実 装 した <strong>ARM</strong>v7 以 降 だけで<br />
す。<br />
PLI を 使 用 でき るのは <strong>ARM</strong>v7 以 降 だけです。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-27<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
16 ビットの Thumb PLD、 PLDW、 および PLI 命 令 はあ り ません。<br />
これらはヒン ト 命 令 であり、 その 実 装 はオプショ ンです。 実 装 さ れていない<br />
場 合 、 NOP として 実 行 されます。<br />
4-28 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.2.8 LDM、 STM<br />
多 重 レ ジ ス タ ロー ド / ストア 命 令 です。 <strong>ARM</strong> 状 態 ではレ ジ ス タ r0 ~ r15 の 任<br />
意 の 組 み 合 わせを 転 送 でき ますが、 Thumb 状 態 では 制 限 がい く つかあ り ます。<br />
「PUSH および POP」 (ページ 4-33) も 参 照 して 下 さい。<br />
構 文<br />
op{addr_mode}{cond} Rn{!}, reglist{^}<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
addr_mode<br />
次 のいずれかを 指 定 でき ます。<br />
LDM 複 数 のレ ジ ス タ を ロー ド し ます。<br />
STM 複 数 のレ ジ ス タ を ス ト ア し ます。<br />
以 下 のいずれかを 指 定 し ます。<br />
IA 転 送 単 位 でア ド レ ス をポ ス ト イ ン ク リ メ ン ト し ます。<br />
これはデフォルト 値 なので、 省 略 できます。<br />
IB 転 送 単 位 でア ド レ ス をプレ イ ン ク リ メ ン ト し ます<br />
(<strong>ARM</strong> のみ)。<br />
DA<br />
DB<br />
転 送 単 位 でア ド レ ス をポ ス ト デ ク リ メ ン ト し ます<br />
(<strong>ARM</strong> のみ)。<br />
転 送 単 位 でア ド レ ス をプレデ ク リ メ ン ト し ます。<br />
ス タ ッ ク 指 向 のア ド レ ッ シングモー ド 接 尾 文 字 については、<br />
表 2-9 (ページ 2-46) を 参 照 して 下 さい。<br />
cond<br />
Rn<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
ベース レ ジ ス タ です。 つま り 、 転 送 に 使 用 する 初 期 ア ド レ スが<br />
保 持 さ れる <strong>ARM</strong> レジスタです。 Rn に r15 は 指 定 でき ません。<br />
! 任 意 に 指 定 で き る 接 尾 文 字 です。 ! を 指 定 する と 、 最 終 ア ド レ ス<br />
が Rn にライ トバックされます。<br />
reglist<br />
ロード またはス ト アするレジスタのリ ス ト を 中 括 弧 で 囲 んで 指<br />
定 します。 レジスタ 範 囲 も 指 定 できます。 複 数 のレ ジ ス タ ま たは<br />
レ ジ ス タ 範 囲 を 指 定 する 場 合 は、 コ ンマで 区 切 る 必 要 があ り ま<br />
す (「サンプル」 (ページ 4-32) を 参 照 )。<br />
詳 細 については、 「32 ビッ ト Thumb-2 命 令 の reglist に 関 する 制 約<br />
条 件 」 (ページ 4-31) を 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-29<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
^<br />
任 意 に 指 定 で き る 接 尾 文 字 です。 <strong>ARM</strong> 状 態 のみで 使 用 で き ま<br />
す。 ユーザモードやシステムモードでは 使 用 できません。 この 接<br />
尾 文 字 には 以 下 の 目 的 があ り ます。<br />
• 命 令 に ( 任 意 のア ド レ ッ シングモー ド で) LDM を 指 定 し、<br />
reglist にプログラ ムカウンタ (r15) が 含 まれている 場 合 、<br />
通 常 の 多 重 レ ジ ス タ 転 送 が 行 われる だけでな く 、 SPSR が<br />
CPSR にコピーされます。 これは、 例 外 ハンド ラからの 復 帰<br />
に 必 要 です。 し たがって、 こ の 接 尾 文 字 は 必 ず 例 外 モー ド<br />
から 使 用 して 下 さい。<br />
• 例 外 モー ド で 使 用 さ れない 場 合 には、 現 在 のモー ド のレ ジ<br />
スタではなく、 ユーザモードのレジスタとの 間 でデータ 転<br />
送 が 実 行 されます。<br />
4-30 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
32 ビット Thumb-2 命 令 の reglist に 関 する 制 約 条 件<br />
32 ビッ ト Thumb-2 命 令 では、 以 下 の 制 約 条 件 が 適 用 さ れます。<br />
• SP をリストに 含 めることはできません。<br />
• STM 命 令 では、 プ ロ グ ラ ム カ ウ ン タ を リ ス ト に 含 め る こ と はで き ません。<br />
• LDM 命 令 では、 プ ロ グ ラ ム カ ウ ン タ と lr を 両 方 と も リ ス ト に 含 める こ と<br />
はでき ません。<br />
• リ ス ト には 複 数 のレジス タ を 指 定 する 必 要 があ り ます。<br />
reglist にレジスタが 1 つしか 指 定 されていない STM または LDM 命 令 を 書 いた 場<br />
合 は、 自 動 的 に 同 等 の STR または LDR 命 令 に 書 き 換 え ら れます。 逆 アセンブル<br />
リ ス ト と ソ ース コー ド を 比 較 する 場 合 は、 こ の 点 に 注 意 し て 下 さ い。<br />
アセンブラの --diag_warning 1645 コマンド ラインオプショ ンを 使 用 して、 命 令<br />
置 換 が 発 生 し たか 確 認 で き ます。<br />
16 ビット 命 令<br />
Thumb-2 コード、 および Thumb-2 以 前 のプ ロ セ ッ サ 上 の Thumb コードでは、<br />
これらの 命 令 のサブセッ トの 16 ビッ トバージョンを 使 用 できます。<br />
16 ビ ッ ト 命 令 には、 以 下 の 制 約 条 件 が 適 用 されます。<br />
• reglist に 指 定 する レ ジ ス タはすべて Lo レジスタである 必 要 があり ま<br />
す。<br />
• Rn は Lo レジスタである 必 要 があり ます。<br />
• addr_mode は 省 略 する (ま たは IA を 指 定 する) 必 要 があ り ます。 つま り 、<br />
転 送 単 位 でア ド レ ス をポ ス ト イ ン ク リ メ ン ト する 必 要 があ り ます。<br />
• STM 命 令 に 対 し て ラ イ ト バ ッ ク を 指 定 する 必 要 があ り ます。<br />
• Rn が reglist にない 場 合 、 LDM 命 令 に 対 し て ラ イ ト バ ッ ク を 指 定 する 必 要<br />
があ り ます。<br />
また、PUSH および POP 命 令 を こ の 形 式 で 記 述 で き ます。 PUSH と POP の 一 部 の 形<br />
式 は、 16 ビット 命 令 でもあります。 詳 細 については、 「PUSH および POP」<br />
(ページ 4-33) を 参 照 して 下 さい。<br />
注<br />
これらの 16 ビッ ト 命 令 は、 Thumb-2EE では 使 用 でき ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-31<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
pc へのロー ド<br />
pc (プログラムカウンタ) へのロードを 実 行 すると、 ロードされたアドレス<br />
にあ る 命 令 への 分 岐 が 発 生 し ます。<br />
<strong>ARM</strong>v4 では、 ロード されたア ド レ スのビ ッ ト [1:0] は 0b00 になっている 必 要<br />
があ り ます。<br />
<strong>ARM</strong>v5T 以 降 には 以 下 の よ う な 特 徴 があ り ます<br />
• ビット [1:0] は 0b10 にでき ません。<br />
• ビット [0] が 1 なら、 Thumb 状 態 で 実 行 が 継 続 し ます。<br />
• ビット [0] が 0 なら、 <strong>ARM</strong> 状 態 で 実 行 が 継 続 し ます。<br />
ベース レ ジス タのロー ド またはス ト ア と ラ イ ト バ ッ クの 使 用<br />
<strong>ARM</strong> コード または Thumb-2 以 前 の Thumb コードでは、Rn が reglist に 含 まれ<br />
ていて、 ラ イ ト バッ クが ! 接 尾 文 字 で 指 定 さ れてい る と 、 以 下 の よ う にな り<br />
ます。<br />
• 命 令 に STM または STMIA が 指 定 され、 Rn が reglist 内 で 最 も 番 号 の 小 さい<br />
レジスタである 場 合 は、Rn の 初 期 値 がス ト ア さ れます。<br />
• 上 記 以 外 の 場 合 は、 ロー ド ま たはス ト ア さ れる Rn の 値 を 信 頼 でき ませ<br />
ん。<br />
Thumb-2 コードでは、 Rn が reglist に 含 まれていて、 ラ イ ト バッ クが ! 接 尾 文<br />
字 で 指 定 されている と、<br />
• すべての 32 ビ ッ ト 命 令 が 予 測 不 可 能 にな り ます。<br />
• 16 ビット 命 令 は Thumb-2 以 前 の Thumb コー ド の 場 合 と 同 様 に 動 作 し ま<br />
すが、 その 使 用 は 非 推 奨 です。<br />
サンプル<br />
LDM r8,{r0,r2,r9} ; LDMIA is a synonym for LDM<br />
STMDB r1!,{r3-r6,r11,r12}<br />
誤 用 例<br />
STM r5!,{r5,r4,r9} ; value stored for r5 unpredictable<br />
LDMDA r2, {} ; must be at least one register in list<br />
4-32 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.2.9 PUSH および POP<br />
完 全 降 順 スタ ッ クに 対 してレジスタのプッシュ とポップを 実 行 します。<br />
構 文<br />
PUSH{cond} reglist<br />
POP{cond} reglist<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
reglist はレ ジ ス タ の 非 空 リ ス ト で、 中 括 弧 で 囲 まれます。 レ ジ ス タ 範<br />
囲 も 中 に 含 まれます。 複 数 のレ ジ ス タ ま たはレ ジ ス タ 範 囲 を 指 定<br />
する 場 合 は、 コ ンマで 区 切 る 必 要 があ り ます。<br />
使 用 法<br />
PUSH と POP は、 ベース レジス タが sp (r13) で、 調 整 されたアドレスがベース<br />
レジスタにライ トバックされる STMDB と LDM (または LDMIA) の 同 じ 意 味 です。<br />
このよ うな 場 合 は、PUSH と POP ニーモニ ッ ク を 使 用 するのが 適 切 です。<br />
レジスタは、 番 号 順 にスタッ クにス ト アされます。 最 も 小 さな 番 号 のレジス<br />
タが 最 下 位 アドレスにス ト アされます。<br />
reglist にプログラムカウンタを 含 む POP<br />
この 命 令 は、 スタックから pc にポップされたア ド レスへの 分 岐 を 発 生 させま<br />
す。 一 般 的 には、 サブルーチンからの 復 帰 に 使 用 し ます。 サブルーチンでは lr<br />
がサブルーチン 開 始 位 置 でス タ ッ ク にプ ッ シ ュ さ れます。<br />
<strong>ARM</strong>v5T 以 降 には 以 下 の よ う な 特 徴 があ り ます<br />
• ビッ ト [1:0] は 0b10 にでき ません。<br />
• ビッ ト [0] が 1 なら、 Thumb 状 態 で 実 行 が 継 続 し ます。<br />
• ビッ ト [0] が 0 なら、 <strong>ARM</strong> 状 態 で 実 行 が 継 続 し ます。<br />
<strong>ARM</strong>v4 では、 ロード されたア ド レ スのビ ッ ト [1:0] は 0b00 になっている 必 要<br />
があ り ます。 POP を 状 態 の 変 更 に 使 用 する こ と はで き ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-33<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
Thumb 命 令<br />
これらの 命 令 のサブセッ トは、 Thumb 命 令 セ ッ ト で 使 用 で き ます。<br />
16 ビ ッ ト 命 令 には、 以 下 の 制 約 条 件 が 適 用 さ れます。<br />
• PUSH の 場 合 、 reglist が 格 納 でき るのは、 Lo レジスタ と lr だけです。<br />
• POP の 場 合 、 reglist が 格 納 でき るのは、 Lo レジスタ と pc だけです。<br />
32 ビ ッ ト 命 令 には、 以 下 の 制 約 条 件 が 適 用 さ れます。<br />
• reglist に sp を 格 納 でき ません。<br />
• PUSH の 場 合 、 reglist に pc を 格 納 できません。<br />
• POP の 場 合 、 reglist に lr か pc のいずれかを 格 納 で き ますが、 両 方 は 格 納<br />
できません。<br />
サンプル<br />
PUSH<br />
PUSH<br />
POP<br />
{r0,r4-r7}<br />
{r2,lr}<br />
{r0,r10,pc} ; no 16-bit version available<br />
4-34 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.2.10 RFE<br />
例 外 か ら 復 帰 する 命 令 です。<br />
構 文<br />
RFE{addr_mode}{cond} Rn{!}<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
addr_mode<br />
cond<br />
以 下 のいずれかを 指 定 し ます。<br />
IA<br />
IB<br />
DA<br />
DB<br />
転 送 単 位 でア ド レ ス をポ ス ト イ ン ク リ メ ン ト し ます<br />
(フル 下 降 ス タ ッ ク)。<br />
転 送 単 位 でア ド レ ス をプレ イ ン ク リ メ ン ト し ます<br />
(<strong>ARM</strong> のみ)。<br />
転 送 単 位 でア ド レ ス をポ ス ト デ ク リ メ ン ト し ます<br />
(<strong>ARM</strong> のみ)。<br />
転 送 単 位 でア ド レ ス をプレデ ク リ メ ン ト し ます。<br />
addr_mode を 省 略 する と 、 IA (ポス ト イ ン ク リ メ ン ト ) が 使 用 さ<br />
れます。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
注<br />
cond を 指 定 でき るのは、 Thumb-2 コードで、 前 に IT 命 令 を 使 用<br />
し た 場 合 のみです。 この 命 令 は、 <strong>ARM</strong> では 無 条 件 命 令 です。<br />
Rn<br />
ベース レ ジ ス タ を 指 定 し ます。 Rn に r15 は 使 用 でき ません。<br />
! 任 意 に 指 定 で き る 接 尾 文 字 です。 ! を 指 定 する と 、 最 終 ア ド レ ス<br />
が Rn にライ トバックされます。<br />
使 用 法<br />
SRS 命 令 を 使 用 し て 復 帰 状 態 を ス ト ア し た 場 合 は、 RFE を 使 用 して 例 外 から 復<br />
帰 でき ます (「SRS」 (ページ 4-38) を 参 照 )。 Rn は 通 常 は sp であ り 、 復 帰 状 態<br />
情 報 は 保 存 さ れます。<br />
Thumb-2EE では、 ベース レジス タの 値 が 0 の 場 合 、 HandlerBase - 4 にある<br />
NullCheck ハン ド ラへの 分 岐 が 実 行 さ れます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-35<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
演 算<br />
Rn に 保 持 されているアドレスと、 その 次 のアドレスから、 プログラムカウン<br />
タと CPSR をロードします。 また、 オプショ ンを 指 定 して Rn を 更 新 でき ます。<br />
注 釈<br />
RFE は、 プロ グ ラ ムカ ウ ン タによ って、 ア ド レ スが 書 き 込 まれます。 例 外 復 帰<br />
後 に 使 用 さ れる 命 令 セ ッ ト に 合 わせて、 こ のア ド レ スの 境 界 整 列 を 調 整 する<br />
必 要 があ り ます。<br />
• <strong>ARM</strong> 命 令 セ ッ ト に 復 帰 する には、 プ ロ グ ラ ムカ ウ ン タ に 書 き 込 むア ド<br />
レ ス を ワー ド 境 界 で 整 列 する 必 要 があ り ます。<br />
• Thumb-2 命 令 セ ッ ト に 復 帰 するには、 プ ロ グ ラ ム カ ウ ン タ に 書 き 込 むア<br />
ド レ ス をハーフ ワー ド 境 界 で 整 列 する 必 要 があ り ます。<br />
• Jazelle ® 命 令 セ ッ ト に 復 帰 する 場 合 、 プ ロ グ ラ ムカ ウ ン タ に 書 き 込 むア<br />
ド レ スの 境 界 調 整 について、 制 限 はあ り ません。<br />
上 記 の 規 則 に 従 わない 結 果 は 予 測 不 可 能 です。 ただ し、 適 切 な 例 外 開 始 メ カ<br />
ニズムの 後 で 復 帰 する ために 命 令 を 使 用 する 場 合 、 ソ フ ト ウ ェ ア 側 に 特 別 な<br />
予 防 策 は 必 要 あ り ません。<br />
ア ド レ スがワー ド 境 界 で 整 列 さ れていない 場 合 、RFE は Rn の 最 下 位 2 ビッ トを<br />
無 視 し ます。<br />
アーキテクチャ 上 では、 RFE によって 生 成 される、 メモリの 各 ワードへのアク<br />
セスの 時 間 的 順 序 が 定 義 さ れていません。 アクセス 順 序 の 影 響 を 受 ける メモ<br />
リマップされた I/O 位 置 では、 この 命 令 を 使 用 しないで 下 さい。<br />
mode でユーザモー ド を 指 定 し た 場 合 、 CPSR への 書 き 込 みについては 通 常 の 規<br />
則 が 適 用 されます。 詳 細 については、 『<strong>ARM</strong> アーキテクチャ リ フ ァ レンスマ<br />
ニュアル』 を 参 照 して 下 さい。<br />
mode で 監 視 モー ド を 指 定 し た 場 合 、 結 果 は 予 測 不 可 能 です (「SMC」 (ページ<br />
4-150) を 参 照 )。<br />
アーキテクチャ<br />
この <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6 以 降 で 使 用 で き ます。<br />
この 32 ビット Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。 ただ し、<br />
<strong>ARM</strong>v7-M プロファイルでは 使 用 できません。<br />
4-36 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
こ の 命 令 の 16 ビットバージョンはありません。<br />
例<br />
RFE sp!<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-37<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.2.11 SRS<br />
ス タ ッ ク に 復 帰 状 態 を ス ト アする 命 令 です。<br />
構 文<br />
SRS{addr_mode}{cond} sp{!}, #modenum<br />
SRS{addr_mode}{cond} #modenum{!}<br />
; This is a pre-UAL syntax<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
addr_mode<br />
cond<br />
以 下 のいずれかを 指 定 し ます。<br />
IA 転 送 単 位 でア ド レ ス をポ ス ト イ ン ク リ メ ン ト し ます。<br />
IB 転 送 単 位 でア ド レ ス をプレ イ ン ク リ メ ン ト し ます<br />
(<strong>ARM</strong> のみ)。<br />
DA<br />
転 送 単 位 でア ド レ ス をポ ス ト デ ク リ メ ン ト し ます<br />
(<strong>ARM</strong> のみ)。<br />
DB 転 送 単 位 でア ド レ ス をプレデ ク リ メ ン ト し ます ( 完 全<br />
降 順 ス タ ッ ク)。<br />
addr_mode を 省 略 する と、 IA (ポス ト イ ン ク リ メ ン ト ) が 使 用 さ<br />
れます。 ス タ ッ ク 指 向 のア ド レ ッ シングモード 接 尾 文 字 について<br />
は、 表 2-9 (ページ 2-46) を 参 照 して 下 さい。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
注<br />
cond を 指 定 でき るのは、 Thumb-2 コードで、 前 に IT 命 令 を 使 用<br />
した 場 合 のみです。 この 命 令 は、 <strong>ARM</strong> では 無 条 件 命 令 です。<br />
! 任 意 に 指 定 で き る 接 尾 文 字 です。 ! を 指 定 する と 、 modenum によっ<br />
て 指 定 されたモード の sp に 最 終 ア ド レ スがラ イ ト バッ ク されま<br />
す。<br />
modenum<br />
バンク 付 き sp がベース レジス タ と し て 使 用 されるモード の 番 号<br />
を 指 定 し ます。 詳 細 については、 「プロセ ッ サモード」 (ページ<br />
2-6) を 参 照 して 下 さい。<br />
4-38 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
演 算<br />
SRS は、 modenum によって 指 定 されたモードの sp が 保 持 する ア ド レ ス と その 次<br />
のワードに、 現 在 のモードの lr と SPSR をそれぞれス ト アします。 またオプ<br />
ションを 指 定 してmodenum に よ っ て 指 定 さ れたモー ド の sp を 更 新 できます。 こ<br />
の 命 令 は、 一 般 的 にス タ ッ クへのア ク セスに 使 用 さ れる STM 命 令 と 互 換 性 が<br />
あります (「LDM、 STM」 (ページ 4-29) を 参 照 )。<br />
注<br />
完 全 降 順 ス タ ッ ク に 対 し ては、 SRSFD または SRSDB を 使 用 する 必 要 があ り ます。<br />
使 用 法<br />
SRS 命 令 を 使 用 し て、 自 動 的 に 選 択 さ れた 別 のス タ ッ ク に、 例 外 ハン ド ラ の 復<br />
帰 状 態 を ス ト アで き ます。<br />
Thumb-2EE では、 ベース レジス タの 値 が 0 の 場 合 、 HandlerBase - 4 にある<br />
NullCheck ハン ド ラへの 分 岐 が 実 行 さ れます。<br />
注 釈<br />
アドレスがワード 境 界 で 整 列 されていないところでは、SRS は、 指 定 されたア<br />
ドレスの 最 下 位 2 ビ ッ ト を 無 視 し ます。<br />
アーキテクチャ 上 では、 SRS によって 生 成 される、 メモリの 各 ワードへのアク<br />
セスの 時 間 的 順 序 が 定 義 さ れていません。 アクセス 順 序 の 影 響 を 受 けるメモ<br />
リマップされた I/O 位 置 では、 こ の 命 令 を 使 用 し ないで 下 さ い。<br />
ユーザモード とシステムモードには SPSR がないため、 SRS の 結 果 は 予 測 不 可<br />
能 です。<br />
アーキテクチャ<br />
この <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6 以 降 で 使 用 で き ます。<br />
この 32 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。 ただ し、<br />
<strong>ARM</strong>v7-M プロファイルでは 使 用 できません。<br />
こ の 命 令 の 16 ビットバージョンはありません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-39<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
例<br />
R13_usr EQU 16<br />
SRSFD sp,#R13_usr<br />
4.2.12 LDREX と STREX<br />
排 他 的 レ ジ ス タ ロー ド / ストア 命 令 です。<br />
構 文<br />
LDREX{cond} Rt, [Rn {, #offset}]<br />
STREX{cond} Rd, Rt, [Rn {, #offset}]<br />
LDREXB{cond} Rt, [Rn]<br />
STREXB{cond} Rd, Rt, [Rn]<br />
LDREXH{cond} Rt, [Rn]<br />
STREXH{cond} Rd, Rt, [Rn]<br />
LDREXD{cond} Rt, Rt2, [Rn]<br />
STREXD{cond} Rd, Rt, Rt2, [Rn]<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond<br />
Rd<br />
Rt<br />
Rt2<br />
Rn<br />
offset<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
復 帰 ス テータ スのデス テ ィ ネーシ ョ ン レ ジ ス タ を 指 定 し ます。<br />
ロー ド ま たはス ト アする レ ジ ス タ を 指 定 し ます。<br />
ダブルワードのロード とス トアに 使 用 する 2 番 目 のレ ジ ス タ を 指<br />
定 します。<br />
メモリアドレスのベースとなるレジスタを 指 定 します。<br />
Rn の 値 に 適 用 さ れる 任 意 のオフセ ッ ト を 指 定 し ます。 offset は<br />
Thumb-2 命 令 でのみ 使 用 可 能 です。 offset を 省 略 し た 場 合 、 オフ<br />
セッ トは 0 として 処 理 されます。<br />
4-40 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
LDREX<br />
LDREX は、 メ モ リ からデータ を ロー ド し ます。<br />
• 物 理 ア ド レ スに 共 有 TLB 属 性 が 設 定 さ れてい る 場 合 、 LDREX は、 その 物<br />
理 ア ド レ スに 現 在 のプ ロ セ ッ サの 排 他 的 ア ク セス を 示 すタ グ を 付 け、 他<br />
の 物 理 ア ド レ スに 対 する こ のプ ロ セ ッ サの 排 他 的 ア ク セス タ グ を ク リ ア<br />
します。<br />
• 共 有 TLB 属 性 が 設 定 さ れていない 場 合 、 LDREX は、 実 行 中 のプ ロ セ ッ<br />
サがまだア ク セ ス し ていない タ グ 付 き の 物 理 ア ド レ スがあ る こ と を 示 す<br />
タグを 付 けます。<br />
STREX<br />
STREX は、 メ モ リ への 条 件 付 き ス ト アを 実 行 し ます。 条 件 を 以 下 に 示 し ます。<br />
• 物 理 ア ド レ スに 共 有 TLB 属 性 が 設 定 さ れておらず、 実 行 中 のプ ロ セ ッ<br />
サによ ってまだア クセス されていないタグ 付 きの 物 理 ア ド レスが 存 在 す<br />
る 場 合 は、 この 命 令 によるス ト アが 実 行 され、 タグがク リ アされて、 Rd<br />
に 0 が 戻 り ます。<br />
• 物 理 ア ド レ スに 共 有 TLB 属 性 が 設 定 さ れておらず、 実 行 中 のプ ロ セ ッ<br />
サによ ってア クセス されていないタグ 付 きの 物 理 ア ド レスが 存 在 しない<br />
場 合 は、 ス ト アは 発 生 せず、 Rd に 1 が 戻 り ます。<br />
• 物 理 ア ド レ スに 共 有 TLB 属 性 が 設 定 さ れてお り 、 その 物 理 ア ド レ スに<br />
実 行 中 のプ ロ セ ッ サに よ る 排 他 的 ア ク セスの タ グが 付 け られてい る 場 合<br />
は、 ス ト アが 発 生 し て タ グが ク リ ア され、 Rd に 0 が 戻 り ます。<br />
• 物 理 ア ド レ スに 共 有 TLB 属 性 が 設 定 さ れてお り 、 その 物 理 ア ド レ スに<br />
実 行 中 のプ ロ セ ッ サに よ る 排 他 的 ア ク セスの タ グが 付 け られていない 場<br />
合 は、 ス ト アは 発 生 せず、 Rd に 1 が 戻 り ます。<br />
制 約 条 件<br />
Rd、 Rt、 Rt2、 Rn のいずれのパラ メータにも r15 は 指 定 でき ません。<br />
STREX では、 Rd に Rt、 Rt2、 または Rn と 同 じレジスタは 指 定 できません。<br />
<strong>ARM</strong> 命 令 には、 以 下 の 制 約 条 件 が 適 用 さ れます。<br />
• Rt には 偶 数 番 号 のレ ジ ス タ (r14 以 外 ) を 指 定 する 必 要 があ り ます。<br />
• Rt2 は R(t+1) でなければな り ません。<br />
• offset は 使 用 でき ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-41<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
Thumb 命 令 の 場 合 :<br />
• Rd、 Rt、 および Rt2 のいずれのパラ メータにも r13 は 指 定 でき ません。<br />
• LDREXD では、 Rt と Rt2 に 同 じ レジス タは 指 定 でき ません。<br />
• offset には、 0 ~ 1020 の 範 囲 内 にあ る 4 の 倍 数 を 指 定 でき ます。<br />
使 用 法<br />
LDREX 命 令 と STREX 命 令 を 使 用 し て、 マルチプ ロ セ ッ サの 共 有 メ モ リ シ ス テム<br />
でプロセス 間 通 信 を 実 装 できます。<br />
パフ ォーマン ス 上 の 理 由 か ら、 対 応 する LDREX 命 令 と STREX 命 令 の 間 に 記 述 す<br />
る 命 令 の 数 は 最 小 限 に 抑 えて 下 さい。<br />
注<br />
STREX 命 令 で 使 用 されるアドレスは、 直 前 に 実 行 された LDREX 命 令 で 使 用 さ れ<br />
たア ド レ ス と 同 一 であ る 必 要 があ り ます。 異 なるア ド レ スに 対 して STREX 命 令<br />
を 実 行 する と 、 その 結 果 は 予 測 不 可 能 にな り ます。<br />
アーキテクチャ<br />
<strong>ARM</strong> LDREX と STREX は <strong>ARM</strong>v6 以 降 で 使 用 で き ます。<br />
<strong>ARM</strong> LDREXB、 LDREXH、 LDREXD、 STREXB、 STREXD、 および STREXH は <strong>ARM</strong>v6K 以 降 で<br />
使 用 で き ます。<br />
これらの 32 ビッ ト Thumb 命 令 はどれも <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。 ただ<br />
し、LDREXD と STREXD は <strong>ARM</strong>v7-M プロファイルでは 使 用 できません。<br />
これらの 命 令 の 16 ビッ トバージョンはありません。<br />
サンプル<br />
MOV r1, #0x1<br />
; load the ‘lock taken’ value<br />
try<br />
LDREX r0, [LockAddr] ; load the lock value<br />
CMP r0, #0<br />
; is the lock free?<br />
STREXEQ r0, r1, [LockAddr] ; try and claim the lock<br />
CMPEQ r0, #0<br />
; did this succeed?<br />
BNE try<br />
; no – try again<br />
.... ; yes – we have the lock<br />
4-42 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.2.13 CLREX<br />
排 他 を ク リ アする 命 令 です。 排 他 ア ク セ ス を 要 求 し てい る ア ド レ スが 存 在 す<br />
る こ と を 示 す、 実 行 中 のプ ロ セ ッ サの ローカルレ コー ド を ク リ ア し ます。<br />
構 文<br />
CLREX{cond}<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
注<br />
cond を 指 定 でき るのは、 Thumb-2 コードで、 前 に IT 命 令 を 使 用<br />
し た 場 合 のみです。 この 命 令 は、 <strong>ARM</strong> では 無 条 件 命 令 です。<br />
使 用 法<br />
CLREX 命 令 を 使 用 し て、 密 に 結 合 されている 排 他 ア ク セスモニ タ をオープンア<br />
クセス 状 態 に 戻 すことができます。 これによ り、 メモリへのダミース トアを<br />
行 う 必 要 がなくなります。 同 期 のプ リ ミ テ ィ ブサポー ト の 詳 細 については、<br />
『<strong>ARM</strong> アーキテ クチャ リ フ ァ レンスマニュアル』 を 参 照 して 下 さい。<br />
CLREX が、 ア ド レ スか ら 排 他 ア ク セスの 要 求 があ る 実 行 中 のプ ロ セ ッ サのグ<br />
ローバルレ コー ド も ク リ アする かど う かは、 実 装 に よ って 定 義 さ れます。<br />
アーキテクチャ<br />
この <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6K 以 降 で 使 用 で き ます。<br />
この 32 ビッ ト Thumb-2 命 令 は <strong>ARM</strong>v7 以 降 で 使 用 で き ます。<br />
16 ビッ トの Thumb CLREX 命 令 はあ り ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-43<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.2.14 SWP と SWPB<br />
レジス タ と メ モ リ 間 のデータ ス ワ ッ プ 命 令 です。<br />
構 文<br />
SWP{B}{cond} Rt, Rt2, [Rn]<br />
各 パ ラ メ ータには 以 下 の 意 味 があ り ます。<br />
cond<br />
B<br />
Rt<br />
Rt2<br />
Rn<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
任 意 に 指 定 で き る 接 尾 文 字 です。 B を 指 定 した 場 合 は、 バイ ト が<br />
スワップされます。 指 定 し なかった 場 合 は、 32 ビッ トワードがス<br />
ワップされます。<br />
デステ ィネーシ ョ ンレジスタを 指 定 します。<br />
ソースレジスタを 指 定 します。 Rt2 に Rt と 同 じレジスタを 指 定 で<br />
きます。<br />
メ モ リ 内 のア ド レ ス を 保 持 し ます。 Rn には、 Rt および Rt2 とは 異<br />
な る レ ジ ス タ を 指 定 する 必 要 があ り ます。<br />
使 用 法<br />
SWP と SWPB を 使 用 して、 セマフォを 実 装 できます。<br />
• メモリからのデータが Rt にロード されます。<br />
• Rt2 の 内 容 が メ モ リ に 保 存 さ れます。<br />
• Rt2 が Rt と 同 じレジスタになっている 場 合 、 レジスタの 内 容 がそのメモ<br />
リの 場 所 にある 内 容 とスワップされます。<br />
注<br />
<strong>ARM</strong>v6 以 降 では、 SWP および SWPB の 使 用 はお 勧 めで き ません。 <strong>ARM</strong>v6 以 降 に<br />
おける 洗 練 されたセマフ ォの 実 装 で 使 用 する 命 令 については、 「LDREX と<br />
STREX」 (ページ 4-40) を 参 照 して 下 さい。<br />
4-44 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
アーキテクチャ<br />
これらの <strong>ARM</strong> 命 令 は、 <strong>ARM</strong> アーキテ ク チャ のすべてのバージ ョ ンで 使 用 で<br />
きます。<br />
Thumb では SWP または SWPB 命 令 はあ り ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-45<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.3 汎 用 デー タ 処 理 命 令<br />
こ のセ ク シ ョ ンは 以 下 のサブセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「フレキシブル 第 2 オペラ ン ド」 (ページ 4-47)<br />
• 「ADD、 SUB、 RSB、 ADC、 SBC、 RSC」 (ページ 4-51)<br />
キ ャ リ ー 付 き ま たはキ ャ リ ーな し の 加 算 、 減 算 、 および 逆 減 算 です。<br />
• 「SUBS PC、 lr」 (ページ 4-56)<br />
ス タ ッ ク をポ ッ プ し ない 例 外 か ら の 復 帰 です。<br />
• 「AND、 ORR、 EOR、 BIC、 ORN」 (ページ 4-58)<br />
論 理 積 、 論 理 和 、 排 他 的 論 理 和 (XOR)、 論 理 和 否 定 、 およびビ ッ ト ク<br />
リアです。<br />
• 「CLZ」 (ページ 4-61)<br />
先 行 ゼ ロ カ ウ ン ト 命 令 です。<br />
• 「CMP、 CMN」 (ページ 4-62)<br />
比 較 命 令 と 比 較 否 定 命 令 です。<br />
• 「MOV、 MVN」 (ページ 4-64)<br />
データ 代 入 命 令 と データ を 代 入 し てビ ッ ト 反 転 さ せる 命 令 です。<br />
• 「MOVT」 (ページ 4-67)<br />
上 位 にデータ を 代 入 する 命 令 です。<br />
• 「TST、 TEQ」 (ページ 4-68)<br />
テス ト 命 令 と 等 価 テス ト 命 令 です。<br />
• 「SEL」 (ページ 4-70)<br />
APSR の GE フラグの 状 態 に 基 づいて、 各 オペランドからバイトを 選 択<br />
する 命 令 です。<br />
• 「REV、 REV16、 REVSH、 RBIT」 (ページ 4-72)<br />
バイ ト ま たはビ ッ ト を 反 転 する 命 令 です。<br />
• 「ASR、 LSL、 LSR、 ROR、 RRX」 (ページ 4-73)<br />
算 術 右 シ フ ト 命 令 です。<br />
• 「SDIV、 UDIV」 (ページ 4-76)<br />
4-46 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
符 号 付 き 除 算 と 符 号 な し 除 算 です。<br />
4.3.1 フレキシブル 第 2 オペラン ド<br />
<strong>ARM</strong> および Thumb-2 の 汎 用 データ 処 理 命 令 のほ と んどに、 フ レキシブル 第 2<br />
オペラ ン ド を 使 用 でき ます。 こ のオペラ ン ド は、 各 命 令 の 構 文 の 記 述 におい<br />
て Operand2 と 表 記 されています。 <strong>ARM</strong> 命 令 と Thumb-2 命 令 では、Operand2 で 使<br />
用 でき るオプシ ョ ンが 異 な り ます。<br />
構 文<br />
Operand2 には 以 下 の 2 つの 形 式 を 使 用 でき ます。<br />
#constant<br />
Rm{, shift}<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
constant 数 値 定 数 を 求 め る 式 を 指 定 し ます。 使 用 で き る 定 数 の 範 囲 は、<br />
<strong>ARM</strong> と Thumb-2 で 若 干 異 な り ます。 詳 細 については、「Operand2<br />
の 定 数 」 (ページ 4-48) を 参 照 して 下 さい。<br />
Rm<br />
shift<br />
第 2 オペラ ン ド のデータ を 保 持 する <strong>ARM</strong> レジスタです。 このレ<br />
ジスタのビッ トパターンは、 さまざまな 方 法 でシフ ト またはロ<br />
テー ト でき ます。<br />
任 意 に 指 定 で き る、 Rm に 適 用 される シフ ト 量 です。 以 下 の 値 を 指<br />
定 でき ます。<br />
ASR #n n ビッ ト 算 術 右 シフト。 1 ≤ n ≤ 32。<br />
LSL #n n ビッ ト 論 理 左 シフト。 0 ≤ n ≤ 31。<br />
LSR #n n ビッ ト 論 理 右 シフト。 1 ≤ n ≤ 32。<br />
ROR #n n ビッ ト 右 ロテート。 1 ≤ n ≤ 31。<br />
RRX<br />
type Rs<br />
拡 張 付 き 1 ビッ ト 右 ロテート。<br />
<strong>ARM</strong> のみで 使 用 可 能 です。 各 パ ラ メ ータ には 以 下 の 意<br />
味 があ り ます。<br />
type<br />
Rs<br />
ASR、 LSL、 LSR、 ROR のいずれかを 指 定 し ます。<br />
シフ ト 量 を 渡 す <strong>ARM</strong> レジスタを 指 定 します。<br />
最 下 位 バ イ ト のみが 使 用 さ れます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-47<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
注<br />
シフ ト 演 算 の 結 果 は 命 令 の Operand2 として 使 用 されますが、Rm 自<br />
体 は 変 更 されません。<br />
Operand2 の 定 数<br />
<strong>ARM</strong> 命 令 において、 constant には、 32 ビッ トのワード 内 で 8 ビッ トの 値 を 右<br />
に 任 意 の 偶 数 ビ ッ ト 分 ロ テー ト し て 得 られる 任 意 の 値 を 指 定 で き ます。<br />
32 ビットの Thumb-2 命 令 において、 constant には 以 下 の 値 を 指 定 でき ます。<br />
• 32 ビッ トのワード 内 で 8 ビ ッ ト の 値 を 左 に 任 意 のビ ッ ト 数 シフ ト して 得<br />
られる 定 数<br />
• 0x00XY00XY 形 式 の 任 意 の 定 数<br />
• 0xXY00XY00 形 式 の 任 意 の 定 数<br />
• 0xXYXYXYXY 形 式 の 任 意 の 定 数<br />
ま た、 少 数 の 命 令 では、 constant によ り 広 い 範 囲 の 値 を 指 定 する こ とができま<br />
す。 詳 細 については、 各 命 令 の 説 明 を 参 照 し て 下 さ い。<br />
8 ビ ッ ト の 値 を 右 に 2 ビッ ト、 4 ビッ ト、 または 6 ビッ ト 分 ロテートして 得 ら<br />
れる 定 数 は、 <strong>ARM</strong> データ 処 理 命 令 で 使 用 する こ と はで き ますが、 Thumb-2 で<br />
は 使 用 でき ません。 その 他 すべての <strong>ARM</strong> 定 数 は、 Thumb-2 でも 使 用 できま<br />
す。<br />
ASR<br />
Rm の 内 容 が 2 の 補 数 の 符 号 付 き 整 数 と 見 な さ れる 場 合 、 n ビ ッ ト 分 の 算 術 右 シ<br />
フトは その 値 が 2 n で 除 算 されるの と 同 じです。 元 のビ ッ ト [31] はレジスタの<br />
左 n ビッ トにコピーされます。<br />
LSR と LSL<br />
Rm の 内 容 が 符 号 な し 整 数 と 見 な さ れる 場 合 、 n ビッ ト 分 の 論 理 右 シフトはその<br />
値 が 2 n で 除 算 されるの と 同 じです。 レジスタの 左 n ビッ トは、0 に 設 定 されま<br />
す。<br />
4-48 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
Rm の 内 容 が 符 号 な し 整 数 と 見 な さ れる 場 合 、 n ビ ッ ト 分 の 論 理 左 シフ ト はその<br />
値 を 2 n で 乗 算 されるの と 同 じです。 このとき 警 告 なしでオーバーフローが 発<br />
生 する 場 合 があ り ます。 レジスタの 右 n ビッ トは、 0 に 設 定 されます。<br />
ROR<br />
n ビットの 右 ロテートにより、 レジスタの 右 n ビッ トが 結 果 の 左 n ビッ トに 移<br />
動 します。 同 時 に、 他 のすべてのビ ッ ト が n ビット 分 右 に 移 動 します ( 図 4-1<br />
を 参 照 )。<br />
31 1 0<br />
...<br />
Carry<br />
Flag<br />
図 4-1 ROR<br />
RRX<br />
拡 張 付 き 右 ロ テー ト では、 Rm の 内 容 が 1 ビット 分 右 にシフトされます。 キャ<br />
リーフラグは Rm のビッ ト [31] にコピーされます ( 図 4-2 を 参 照 )。<br />
接 尾 文 字 S が 指 定 されている 場 合 は、 Rm のビッ ト [0] の 古 い 値 がキ ャ リ ーフ ラ<br />
グにシフ ト アウ ト されます (「「キャ リ ーフ ラ グ」」 を 参 照 )。<br />
31 30 1 0<br />
Carry<br />
Flag<br />
... ...<br />
図 4-2 RRX<br />
キャリーフラグ<br />
以 下 の 命 令 の 場 合 、 キ ャ リ ーフ ラ グが、 Rm からシフ トアウ ト された 最 後 の<br />
ビッ トに 更 新 されます。<br />
• 接 尾 文 字 S を 使 用 する 場 合 は、 MOV、 MVN、 AND、 ORR、 ORN、 EOR、 または BIC<br />
• 接 尾 文 字 S を 使 用 する 必 要 がない 場 合 は、 TEQ または TST<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-49<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
命 令 置 換<br />
constant を 否 定 ま たは 論 理 反 転 する 場 合 を 除 き、 特 定 の 命 令 対 (ADD と SUB、<br />
ADC と SBC、 AND と BIC、 MOV と MVN、 および CMP と CMN) は 等 価 です。<br />
constant の 値 を 使 用 で き な く て も、 論 理 反 転 ま たは 否 定 にで き る 可 能 性 があ<br />
る 場 合 は、 アセンブラは 命 令 対 のも う 一 方 の 命 令 に 置 き 換 え、 constant を 反 転<br />
または 否 定 します。<br />
逆 アセンブル リ ス ト と ソース コー ド を 比 較 する 場 合 は、 こ の 点 に 注 意 し て 下<br />
さい。<br />
アセンブラの --diag_warning 1645 コマンドラインオプショ ンを 使 用 して、 命 令<br />
置 換 が 発 生 し たか 確 認 で き ます。<br />
4-50 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.3.2 ADD、 SUB、 RSB、 ADC、 SBC、 RSC<br />
キ ャ リ ー 付 き ま たはキ ャ リ ーな し の 加 算 、 減 算 、 および 逆 減 算 です。<br />
「 並 列 加 算 と 並 列 減 算 」 (ページ 4-106) も 参 照 して 下 さい。<br />
構 文<br />
op{S}{cond} {Rd}, Rn, Operand2<br />
op{cond} {Rd}, Rn, #imm12<br />
; Thumb-2 ADD and SUB only<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
S<br />
cond<br />
Rd<br />
Rn<br />
Operand2<br />
imm12<br />
次 のいずれかを 指 定 し ます。<br />
ADD 加 算<br />
ADC キャ リー 付 き 加 算<br />
SUB 減 算<br />
RSB 逆 減 算<br />
SBC キャ リー 付 き 減 算<br />
RSC キャ リー 付 き 逆 減 算 (<strong>ARM</strong> のみ)<br />
任 意 に 指 定 で き る 接 尾 文 字 です。 S が 指 定 さ れてい る 場 合 は、 演<br />
算 結 果 に 基 づいて 条 件 コー ド フ ラ グが 更 新 さ れます (「 条 件 実<br />
行 」 (ページ 2-20) を 参 照 )。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
デスティネーシ ョ ンレジスタを 指 定 します。<br />
第 1 オペラ ン ド を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
フレキシブル 第 2 オペラ ン ド を 指 定 し ます。 このオプションの 詳<br />
細 については、 「フレキシブル 第 2 オペラ ン ド」 (ページ 4-47)<br />
を 参 照 して 下 さい。<br />
0 ~ 4095 の 範 囲 の 値 を 指 定 し ます。<br />
使 用 法<br />
ADD 命 令 は Rn と Operand2 の 値 を 加 算 し ます。<br />
SUB 命 令 は、 Rn の 値 から Operand2 の 値 を 減 算 し ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-51<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
RSB ( 逆 減 算 ) 命 令 は、 Operand2 の 値 から Rn の 値 を 減 算 し ます。 Operand2 にはさ<br />
まざまなオプションがあるので、 この 命 令 は 便 利 です。<br />
ADC、 SBC、 および RSC を 使 用 し て、 マルチワー ド 算 術 演 算 を 合 成 で き ます<br />
(「マルチワード 演 算 の 例 」 (ページ 4-55) を 参 照 )。<br />
ADC (キ ャ リ ー 付 き 加 算 ) 命 令 は、 Rn の 値 と Operand2 の 値 、 そ し てキ ャ リ ーフ<br />
ラグも 含 めて 加 算 します。<br />
SBC (キ ャ リ ー 付 き 減 算 ) 命 令 は、 Rn の 値 から Operand2 の 値 を 減 算 し ます。<br />
キャ リーフラグがク リアされている 場 合 は、 結 果 から 1 が 引 かれます。<br />
RSC (キ ャ リ ー 付 き 逆 減 算 ) 命 令 は、 Operand2 の 値 から Rn の 減 算 し ます。 キャ<br />
リ ーフ ラ グが ク リ ア さ れてい る 場 合 は、 結 果 か ら 1 が 引 かれます。<br />
状 況 に よ っては、 あ る 命 令 を アセンブ ラ に よ って 別 の 命 令 に 置 換 で き る 場 合<br />
があ り ます。 逆 アセンブル リ ス ト を 参 照 する と きは、 この 点 に 注 意 して 下 さ<br />
い。 詳 細 については、 「 命 令 置 換 」 (ページ 4-50) を 参 照 して 下 さい。<br />
Thumb-2 命 令 での pc の 使 用<br />
ほとんどの 命 令 では、Rd、 またはオペランドに pc (r15) は 使 用 できません。<br />
ただし、 ADD 命 令 ま たは SUB 命 令 で、 定 数 Operand2 の 値 が 0 ~ 4095 の 範 囲 にあ<br />
り 、 接 尾 文 字 S が 指 定 されていない 場 合 は、 Rn に pc を 使 用 できます。 これら<br />
の 命 令 は PC 相 対 ア ド レ ス を 生 成 する のに 役 立 ち ます。 このとき、 プログラム<br />
カウンタのビッ ト [1] の 値 が 0 と し て 読 み 出 さ れる ので、 計 算 に 使 用 するベー<br />
スア ド レ スが 常 にワード 境 界 で 整 列 されます。<br />
「SUBS PC、 lr」 (ページ 4-56) も 参 照 して 下 さい。<br />
「ADR」 (ページ 4-24) も 参 照 して 下 さい。<br />
<strong>ARM</strong> 命 令 での pc の 使 用<br />
Rn に pc (r15) を 指 定 し てい る 場 合 、 使 用 さ れる 値 は 「 命 令 のア ド レ ス + 8」<br />
となります。<br />
Rd に pc を 指 定 し た 場 合 、 以 下 の よ う にな り ます。<br />
• 演 算 結 果 に 対 応 する ア ド レ スへの 分 岐 が 実 行 さ れます。<br />
• 接 尾 文 字 S を 指 定 している 場 合 は、 現 在 のモードの SPSR が CPSR にコ<br />
ピーされます。 こ の 動 作 を 利 用 し て、 例 外 か ら 復 帰 する こ と がで き ます<br />
(『デベロ ッ パガ イ ド 』 の 第 6 章 プ ロ セ ッ サ 例 外 処 理 を 参 照 )。<br />
4-52 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
「ADR」 (ページ 4-24) も 参 照 して 下 さい。<br />
注 意<br />
ユーザモードまたはシステムモードで Rd に pc を 使 用 する 場 合 は、 接 尾 文 字 S<br />
を 使 用 しないで 下 さい。 こ の よ う な 命 令 に よ る 影 響 は 予 測 不 可 能 な う え、 ア<br />
センブル 時 にアセンブラによる 警 告 が 生 成 されません。<br />
レ ジ ス タ 制 御 シフ ト を 行 う データ 処 理 命 令 の 場 合 は、 Rd やオペラ ン ド に pc は<br />
使 用 で き ません (「フレキシブル 第 2 オペラ ン ド」 (ページ 4-47) を 参 照 )。<br />
条 件 フ ラ グ<br />
S が 指 定 さ れてい る 場 合 、 こ れら の 命 令 は 演 算 結 果 に 基 づいて N、 Z、 C、 お<br />
よび V の 各 フ ラ グ を 更 新 し ます。<br />
16 ビット 命 令<br />
これらの 命 令 は、 Thumb-2 以 前 の Thumb コード 内 では 次 の 形 式 で 使 用 できま<br />
す。 ま た、 Thumb-2 コード 内 で 使 用 する と きは 16 ビッ ト 命 令 になります。<br />
ADDS Rd, Rn, #imm<br />
ADDS Rd, Rn, Rm<br />
ADD Rd, Rd, Rm<br />
ADDS Rd, Rd, #imm<br />
ADCS Rd, Rd, Rm<br />
ADD SP, SP, #imm<br />
ADD Rd, SP, #imm<br />
imm の 範 囲 は 0 ~ 7 です。 Rd と Rn は 共 に Lo レジスタである<br />
必 要 があ り ます。<br />
Rd、 Rn および Rm はすべて Lo レジスタである 必 要 があり ま<br />
す。<br />
<strong>ARM</strong>v6 以 前 : Rd と Rm の 少 な く と も 一 方 が Hi レジスタであ<br />
る 必 要 があ り ます。 <strong>ARM</strong>v6T2 以 降 : この 制 約 は 適 用 され<br />
ません。<br />
imm の 範 囲 は 0 ~ 255 です。 Rd は Lo レジスタである 必 要 が<br />
あります。<br />
Rd、 Rn および Rm はすべて Lo レジスタである 必 要 があり ま<br />
す。<br />
imm の 範 囲 は 0 ~ 508 です (ワード 境 界 で 整 列 し ます)。<br />
imm の 範 囲 は 0 ~ 1020 です (ワード 境 界 で 整 列 し ます)。 Rd<br />
は Lo レジスタである 必 要 があり ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-53<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
ADD Rd, pc, #imm<br />
SUBS Rd, Rn, Rm<br />
SUBS Rd, Rn, #imm<br />
SUBS Rd, Rd, #imm<br />
SBCS Rd, Rd, Rm<br />
SUB SP, SP, #imm<br />
RSBS Rd, Rn, #0<br />
imm の 範 囲 は 0 ~ 1020 です (ワード 境 界 で 整 列 し ます)。 Rd<br />
は Lo レジスタである 必 要 があり ます。 この 命 令 では、 プ<br />
ログラムカウンタのビッ ト [1:0] を 0 と し て 読 み 出 し ます。<br />
Rd、 Rn および Rm はすべて Lo レジスタである 必 要 があり ま<br />
す。<br />
imm の 範 囲 は 0 ~ 7 です。Rd と Rn は 共 に Lo レジスタである<br />
必 要 があ り ます。<br />
imm の 範 囲 は 0 ~ 255 です。 Rd は Lo レジスタである 必 要 が<br />
あります。<br />
Rd、 Rn および Rm はすべて Lo レジスタである 必 要 があり ま<br />
す。<br />
imm の 範 囲 は 0 ~ 508 です (ワー ド 境 界 で 整 列 し ます)。<br />
Rd と Rn は 共 に Lo レジスタである 必 要 があり ます。<br />
4-54 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
サンプル<br />
ADD r2, r1, r3<br />
SUBS r8, r6, #240 ; sets the flags on the result<br />
RSB r4, r4, #1280 ; subtracts contents of r4 from 1280<br />
ADCHI r11, r0, r3 ; only executed if C flag set and Z<br />
; flag clear<br />
RSCSLE r0,r5,r0,LSL r4 ; conditional, flags set<br />
誤 用 例<br />
RSCSLE r0,pc,r0,LSL r4<br />
; pc not permitted with register<br />
; controlled shift<br />
マルチワー ド 演 算 の 例<br />
以 下 の 2 つの 命 令 は、r2 と r3 に 保 持 される 1 つの 64 ビット 整 数 を、r0 と r1 に<br />
保 持 さ れる 別 の 64 ビ ッ ト 整 数 に 加 算 し、 その 結 果 を r4 と r5 に 返 し ます。<br />
ADDS r4, r0, r2 ; adding the least significant words<br />
ADC r5, r1, r3 ; adding the most significant words<br />
以 下 の 命 令 は、 一 方 の 96 ビ ッ ト 整 数 を 他 方 の 値 か ら 減 算 し ます。<br />
SUBS<br />
SBCS<br />
SBC<br />
r3, r6, r9<br />
r4, r7, r10<br />
r5, r8, r11<br />
上 記 の 例 では 分 か り やす く する ために、 マルチワード の 値 に 使 用 する レジス<br />
タを 連 続 させていますが、 必 ずし も そ う する 必 要 はあ り ません。 例 えば、 以 下<br />
のよ うにするこ と もできます。<br />
SUBS<br />
SBCS<br />
SBC<br />
r6, r6, r9<br />
r9, r2, r1<br />
r2, r8, r11<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-55<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.3.3 SUBS PC、 lr<br />
ス タ ッ ク をポ ッ プ し ない 例 外 か ら の 復 帰 です。<br />
注<br />
これは Thumb-2 では 特 殊 なケースの 命 令 です。 同 じ 命 令 が <strong>ARM</strong> コードでは 通<br />
常 の 形 式 の SUB 命 令 と し て 使 用 で き ます。 こ れは 「ADD、 SUB、 RSB、 ADC、<br />
SBC、 RSC」 (ページ 4-51) で 説 明 さ れています。<br />
構 文<br />
SUBS{cond} pc, lr, #imm<br />
各 パ ラ メ ータには 以 下 の 意 味 があ り ます。<br />
imm<br />
即 定 値 を 指 定 し ます。 Thumb-2 コードでは、 範 囲 は 0 ~ 255 に 制<br />
限 されます。 <strong>ARM</strong> コードでは、 フレキシブル 第 2 オペラ ン ド で<br />
す。 詳 細 については、 「フレキシブル 第 2 オペラ ン ド」 (ページ<br />
4-47) を 参 照 して 下 さい。<br />
cond 任 意 に 指 定 で き る 条 件 コー ド です (「 条 件 実 行 」 (ページ 2-20)<br />
を 参 照 )。<br />
使 用 法<br />
ス タ ッ ク に 復 帰 状 態 がない 場 合 、 SUBS pc, lr を 使 用 して 例 外 から 復 帰 できま<br />
す。<br />
SUBS pc, lr では、 リ ン ク レ ジ ス タ か ら 値 を 減 算 し、 結 果 をプ ロ グ ラ ム カ ウ ン<br />
タにロード して、 SPSR を CPSR にコピーします。<br />
注 釈<br />
SUBS pc, lr によって、 プログラムカウンタにアドレスが 書 き 込 まれます。 例<br />
外 復 帰 後 に 使 用 さ れる 命 令 セ ッ ト に 合 わせて、 こ のア ド レ スの 境 界 整 列 を 調<br />
整 する 必 要 があ り ます。<br />
• <strong>ARM</strong> 命 令 セ ッ ト に 復 帰 する には、 プ ロ グ ラ ムカ ウ ン タ に 書 き 込 むア ド<br />
レ ス を ワー ド 境 界 で 整 列 する 必 要 があ り ます。<br />
• Thumb-2 命 令 セ ッ ト に 復 帰 するには、 プ ロ グ ラ ム カ ウ ン タ に 書 き 込 むア<br />
ド レ ス をハーフ ワー ド 境 界 で 整 列 する 必 要 があ り ます。<br />
4-56 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
• Jazelle 命 令 セ ッ ト に 復 帰 する 場 合 、 プ ロ グ ラ ム カ ウ ン タ に 書 き 込 むア ド<br />
レ スの 境 界 整 列 について、 制 限 はあ り ません。<br />
上 記 の 規 則 に 従 わない 結 果 は 予 測 不 可 能 です。 ただ し、 適 切 な 例 外 開 始 メ カ<br />
ニズムの 後 で 復 帰 する ために 命 令 を 使 用 する 場 合 、 ソ フ ト ウ ェ ア 側 に 特 別 な<br />
予 防 策 は 必 要 あ り ません。<br />
MOVS pc, lr は Thumb-2 では SUBS pc, lr, #0 と 同 じ 意 味 です。<br />
アーキテクチャ<br />
この <strong>ARM</strong> 命 令 は、 <strong>ARM</strong> アーキテ ク チ ャ のすべてのバージ ョ ンで 使 用 で き ま<br />
す。<br />
この 32 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。 ただ し、<br />
<strong>ARM</strong>v7-M プロファイルでは 使 用 できません。<br />
こ の 命 令 の 16 ビット Thumb バージ ョ ンはあ り ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-57<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.3.4 AND、 ORR、 EOR、 BIC、 ORN<br />
論 理 積 、 論 理 和 、 排 他 的 論 理 和 (XOR)、 ビ ッ ト ク リ ア、 および 論 理 和 否 定<br />
です。<br />
構 文<br />
op{S}{cond} Rd, Rn, Operand2<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
S<br />
cond<br />
Rd<br />
Rn<br />
Operand2<br />
次 のいずれかを 指 定 し ます。<br />
AND 論 理 積<br />
ORR 論 理 和<br />
EOR 排 他 的 論 理 和 (XOR)<br />
BIC<br />
ORN<br />
論 理 積 否 定<br />
論 理 和 否 定 (Thumb-2 のみ)。<br />
任 意 に 指 定 で き る 接 尾 文 字 です。 S が 指 定 されている 場 合 は、 演<br />
算 結 果 に 基 づいて 条 件 コー ド フ ラ グが 更 新 さ れます (「 条 件 実<br />
行 」 (ページ 2-20) を 参 照 )。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
デステ ィネーシ ョ ンレジスタを 指 定 します。<br />
第 1 オペラ ン ド を 保 持 する レジス タ を 指 定 し ます。<br />
フレキシブル 第 2 オペラ ン ド を 指 定 し ます。 このオプショ ンの 詳<br />
細 については、 「フレキシブル 第 2 オペラ ン ド」 (ページ 4-47)<br />
を 参 照 して 下 さい。<br />
使 用 法<br />
AND、 EOR、 および ORR の 各 命 令 は、 Rn と Operand2 の 値 に 対 し、 それぞれビ ッ ト<br />
ご と の 論 理 積 、 排 他 的 論 理 和 (XOR)、 および 論 理 和 を 取 り ます。<br />
BIC (ビットクリア) 命 令 は、Rn 内 のビ ッ ト と、 Operand2 の 値 に 含 まれる、 対<br />
応 する 各 ビ ッ ト の 補 数 と の 論 理 積 を 取 り ます。<br />
ORN Thumb-2 命 令 は、 Rn 内 のビ ッ ト と、 Operand2 の 値 に 含 まれる、 対 応 する 各<br />
ビ ッ ト の 補 数 と の 論 理 和 を 取 り ます。<br />
4-58 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
状 況 に よ っては、 アセンブ ラ が BIC を AND に、 AND を BIC に、 ORN を ORR に、 ORR<br />
を ORN に 置 き 換 え る 場 合 があ り ます。 逆 アセンブル リ ス ト を 参 照 する と きは、<br />
この 点 に 注 意 して 下 さい。 詳 細 については、 「 命 令 置 換 」 (ページ 4-50) を 参<br />
照 して 下 さい。<br />
Thumb-2 命 令 での pc の 使 用<br />
すべての 命 令 で、 Rd、 または 任 意 のオペランドに pc (r15) は 使 用 できませ<br />
ん。<br />
<strong>ARM</strong> 命 令 での pc の 使 用<br />
注<br />
<strong>ARM</strong> 命 令 では pc の 使 用 は 非 推 奨 です。<br />
Rn に pc を 指 定 している 場 合 、 使 用 される 値 は 「 命 令 のアド レス + 8」 となり<br />
ます。<br />
Rd に pc を 指 定 し た 場 合 、 以 下 の よ う にな り ます。<br />
• 演 算 結 果 に 対 応 する ア ド レ スへの 分 岐 が 実 行 さ れます。<br />
• 接 尾 文 字 S を 指 定 している 場 合 は、 現 在 のモードの SPSR が CPSR にコ<br />
ピーされます。 こ の 動 作 を 利 用 し て、 例 外 か ら 復 帰 する こ と がで き ます<br />
(『デベロ ッ パガ イ ド 』 の 第 6 章 プ ロ セ ッ サ 例 外 処 理 を 参 照 )。<br />
注 意<br />
ユーザモードまたはシステムモードで Rd に pc を 使 用 する 場 合 は、 接 尾 文 字 S<br />
を 使 用 しないで 下 さい。 こ の よ う な 命 令 に よ る 影 響 は 予 測 不 可 能 な う え、 ア<br />
センブル 時 にアセンブラによる 警 告 が 生 成 されません。<br />
レ ジ ス タ 制 御 シフ ト を 行 う データ 処 理 命 令 の 場 合 は、 オペラ ン ド に pc は 使 用<br />
できません (「フレキシブル 第 2 オペラ ン ド」 (ページ 4-47) を 参 照 )。<br />
条 件 フ ラ グ<br />
S が 指 定 さ れてい る 場 合 、 こ れら の 命 令 では、 以 下 の よ う にな り ます。<br />
• 結 果 に 応 じ て N フラグおよび Z フラグを 更 新 します。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-59<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
• Operand2 の 計 算 中 に C フラグを 更 新 することが 可 能 です (「フレキシブ<br />
ル 第 2 オペラ ン ド」 (ページ 4-47) を 参 照 )。<br />
• V フラグは 更 新 しません。<br />
16 ビット 命 令<br />
これらの 命 令 は、 Thumb-2 以 前 の Thumb コード 内 では 次 の 形 式 で 使 用 できま<br />
す。 ま た、 Thumb-2 コード 内 で 使 用 する と きは 16 ビット 命 令 になります。<br />
ANDS Rd, Rd, Rm<br />
EORS Rd, Rd, Rm<br />
ORRS Rd, Rd, Rm<br />
BICS Rd, Rd, Rm<br />
Rd および Rm は 共 に Lo レジスタである 必 要 があり ます。<br />
Rd および Rm は 共 に Lo レジスタである 必 要 があり ます。<br />
Rd および Rm は 共 に Lo レジスタである 必 要 があり ます。<br />
Rd および Rm は 共 に Lo レジスタである 必 要 があり ます。<br />
最 初 の 3 つの 例 は、OPS Rd, Rm, Rd を 指 定 しても 問 題 はあ り ません。 命 令 は 変 わ<br />
りません。<br />
サンプル<br />
AND r9,r2,#0xFF00<br />
ORREQ r2,r0,r5<br />
EORS r0,r0,r3,ROR r6<br />
ANDS r9, r8, #0x19<br />
EORS r7, r11, #0x18181818<br />
BIC r0, r1, #0xab<br />
ORN r7, r11, r14, ROR #4<br />
ORNS r7, r11, r14, ASR #32<br />
誤 用 例<br />
EORS r0,pc,r3,ROR r6 ; pc not permitted with register<br />
; controlled shift<br />
4-60 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.3.5 CLZ<br />
先 行 ゼ ロ カ ウ ン ト 命 令 です。<br />
構 文<br />
CLZ{cond} Rd, Rm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
Rd デスティネーシ ョ ンレジスタを 指 定 します。 Rd に r15 は 指 定 でき<br />
ません。<br />
Rm オペラ ン ド レジス タ を 指 定 し ます。 Rm に r15 は 指 定 でき ません。<br />
使 用 法<br />
CLZ 命 令 は Rm の 値 に 含 まれる 先 行 ゼ ロ の 数 を カ ウ ン ト し、 結 果 を Rd に 返 し ま<br />
す。 ソース レ ジ ス タ に 設 定 さ れてい る ビ ッ ト がない 場 合 の 結 果 は 32 となり、<br />
ビッ ト 31 が 設 定 さ れてい る 場 合 の 結 果 はゼ ロ にな り ます。<br />
条 件 フ ラ グ<br />
こ の 命 令 に よ る フ ラ グへの 影 響 はあ り ません。<br />
アーキテクチャ<br />
この <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v5 以 降 で 使 用 で き ます。<br />
この 32 ビッ ト Thumb 命 令 は <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
こ の 命 令 の 16 ビット Thumb バージ ョ ンはあ り ません。<br />
サンプル<br />
CLZ<br />
CLZNE<br />
r4,r9<br />
r2,r3<br />
レジスタ Rm の 値 を 正 規 化 する には、 CLZ Thumb-2 命 令 を 使 用 し、 結 果 と して 返<br />
された Rm 値 の 分 、 Rm を 左 シフ ト し ます。 Rm が 0 の 場 合 にフ ラ グを 設 定 するに<br />
は、 MOV ではな く MOVS を 使 用 し ます。<br />
CLZ r5, r9<br />
MOVS r9, r9, LSL r5<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-61<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.3.6 CMP、 CMN<br />
比 較 命 令 と 比 較 否 定 命 令 です。<br />
構 文<br />
CMP{cond} Rn, Operand2<br />
CMN{cond} Rn, Operand2<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond<br />
Rn<br />
Operand2<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
第 1 オペラ ン ド を 保 持 する <strong>ARM</strong> レジスタを 指 定 します。<br />
フレキシブル 第 2 オペラ ン ド を 指 定 し ます。 このオプショ ンの 詳<br />
細 については、 「フレキシブル 第 2 オペラ ン ド」 (ページ 4-47)<br />
を 参 照 して 下 さい。<br />
使 用 法<br />
これらの 命 令 は、 レジスタ 内 の 値 と Operand2 を 比 較 し ます。 結 果 に 基 づいて 条<br />
件 フ ラ グ を 更 新 し ますが、 結 果 はどのレ ジ ス タ に も 入 れません。<br />
CMP 命 令 は、 Rn の 値 から Operand2 の 値 を 減 算 します。 結 果 が 破 棄 さ れる こ と を<br />
除 けば、 SUBS 命 令 と 同 じ です。<br />
CMN 命 令 は Operand2 の 値 を Rn の 値 に 加 算 し ます。 結 果 が 破 棄 さ れる こ と を 除 け<br />
ば、 ADDS 命 令 と 同 じ です。<br />
状 況 に よ っては、 アセンブ ラ に よ っ て CMN を CMP に、CMP を CMN に 置 換 でき る 場<br />
合 があ り ます。 逆 アセンブル リ ス ト を 参 照 する と きは、 こ の 点 に 注 意 し て 下<br />
さい。 詳 細 については、 「 命 令 置 換 」 (ページ 4-50) を 参 照 して 下 さい。<br />
<strong>ARM</strong> 命 令 での pc の 使 用<br />
注<br />
これらの <strong>ARM</strong> 命 令 では pc (r15) の 使 用 は 非 推 奨 です。<br />
Rn に pc を 指 定 し てい る 場 合 、 使 用 さ れる 値 は 「 命 令 のア ド レ ス + 8」 となり<br />
ます。<br />
4-62 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
レ ジ ス タ 制 御 シフ ト を 行 う データ 処 理 命 令 の 場 合 は、 オペラ ン ド に pc は 使 用<br />
できません (「フレキシブル 第 2 オペラ ン ド」 (ページ 4-47) を 参 照 )。<br />
Thumb-2 命 令 での pc の 使 用<br />
これらの 命 令 では、 オペランドに pc (r15) は 使 用 できません。<br />
条 件 フ ラ グ<br />
こ れら の 命 令 は、 演 算 結 果 に 基 づいて N、 Z、 C、 および V の 各 フ ラ グを 更 新<br />
します。<br />
16 ビット 命 令<br />
これらの 命 令 は、 Thumb-2 以 前 の Thumb コード 内 では 次 の 形 式 で 使 用 できま<br />
す。 ま た、 Thumb-2 コード 内 で 使 用 する と きは 16 ビッ ト 命 令 になります。<br />
CMP Rn, Rm<br />
CMN Rn, Rm<br />
Rn および Rm は 共 に Lo レジスタである 必 要 があり ます。<br />
CMP Rn, #imm Rn は Lo レジスタである 必 要 があり ます。 imm 範 囲 0 ~ 255。<br />
サンプル<br />
CMP r2, r9<br />
CMN r0, #6400<br />
CMPGT r13, r7, LSL #2<br />
誤 用 例<br />
CMP<br />
r2, pc, ASR r0 ; pc not permitted with register controlled shift<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-63<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.3.7 MOV、 MVN<br />
データ 代 入 命 令 と データ を 代 入 し てビ ッ ト 反 転 さ せる 命 令 です。<br />
構 文<br />
MOV{S}{cond} Rd, Operand2<br />
MOV{cond} Rd, #imm16<br />
MVN{S}{cond} Rd, Operand2<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
S<br />
cond<br />
Rd<br />
Operand2<br />
imm16<br />
任 意 に 指 定 で き る 接 尾 文 字 です。 S が 指 定 されている 場 合 は、 演<br />
算 結 果 に 基 づいて 条 件 コー ド フ ラ グが 更 新 さ れます (「 条 件 実<br />
行 」 (ページ 2-20) を 参 照 )。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
デステ ィネーシ ョ ンレジスタを 指 定 します。<br />
フレキシブル 第 2 オペラ ン ド を 指 定 し ます。 このオプショ ンの 詳<br />
細 については、 「フレキシブル 第 2 オペラ ン ド」 (ページ 4-47)<br />
を 参 照 して 下 さい。<br />
0 ~ 65535 の 範 囲 の 値 を 指 定 し ます。<br />
使 用 法<br />
MOV 命 令 は Operand2 の 値 を Rd にコピーします。<br />
MVN 命 令 は Operand2 の 値 を 取 得 し、 その 値 にビ ッ ト ご と の 論 理 NOT 演 算 を 実<br />
行 して、 結 果 を Rd に 返 し ます。<br />
状 況 に よ っては、 アセンブ ラ に よ っ て MVN を MOV に、MOV を MVN に 置 換 でき る 場<br />
合 があ り ます。 逆 アセンブル リ ス ト を 参 照 する と きは、 こ の 点 に 注 意 し て 下<br />
さい。 詳 細 については、 「 命 令 置 換 」 (ページ 4-50) を 参 照 して 下 さい。<br />
Thumb-2 の MOV と MVN での pc の 使 用<br />
pc (r15) は Thumb-2 の MOV と MVN 命 令 では Rd または Operand2 に 使 用 でき ませ<br />
ん。<br />
4-64 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
<strong>ARM</strong> MOV と MVN での pc の 使 用<br />
注<br />
MOV Rd,Rm 構 文 は Rd または Rn が pc の 場 合 に 使 用 で き ますが、 両 方 を pc にす<br />
ることはできません。 その 他 のケースでは 非 推 奨 です。<br />
Rd に pc を 指 定 している 場 合 、 使 用 される 値 は 「 命 令 のアド レス + 8」 となり<br />
ます。<br />
Rd に pc を 指 定 し た 場 合 、 以 下 の よ う にな り ます。<br />
• 演 算 結 果 に 対 応 する ア ド レ スへの 分 岐 が 実 行 さ れます。<br />
• 接 尾 文 字 S を 指 定 している 場 合 は、 現 在 のモードの SPSR が CPSR にコ<br />
ピーされます。 こ の 動 作 を 利 用 し て、 例 外 か ら 復 帰 する こ と がで き ます<br />
(『デベロ ッ パガ イ ド 』 の 第 6 章 プ ロ セ ッ サ 例 外 処 理 を 参 照 )。<br />
注 意<br />
ユーザモードまたはシステムモードで Rd に pc を 使 用 する 場 合 は、 接 尾 文 字 S<br />
を 使 用 しないで 下 さい。 こ の よ う な 命 令 に よ る 影 響 は 予 測 不 可 能 な う え、 ア<br />
センブル 時 にアセンブラによる 警 告 が 生 成 されません。<br />
レ ジ ス タ 制 御 シフ ト を 行 う データ 処 理 命 令 の 場 合 は、 Rd やオペラ ン ド に pc は<br />
使 用 で き ません (「フレキシブル 第 2 オペラ ン ド」 (ページ 4-47) を 参 照 )。<br />
条 件 フ ラ グ<br />
S が 指 定 さ れてい る 場 合 、 こ れら の 命 令 では、 以 下 の よ う にな り ます。<br />
• 結 果 に 応 じ て N フラグおよび Z フラグを 更 新 します。<br />
• Operand2 の 計 算 中 に C フ ラ グ を 更 新 する こ と が 可 能 です (「フレキシブ<br />
ル 第 2 オペラ ン ド」 (ページ 4-47) を 参 照 )。<br />
• V フラグは 更 新 しません。<br />
16 ビット 命 令<br />
これらの 命 令 は、 Thumb-2 以 前 の Thumb コード 内 では 次 の 形 式 で 使 用 できま<br />
す。 ま た、 Thumb-2 コード 内 で 使 用 する と きは 16 ビッ ト 命 令 になります。<br />
MOVS Rd, #imm Rd は Lo レジスタである 必 要 があり ます。 imm 範 囲 0 ~ 255。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-65<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
MOVS Rd, Rm<br />
MOV Rd, Rm<br />
Rd および Rm は 共 に Lo レジスタである 必 要 があり ます。<br />
<strong>ARM</strong>v5 以 前 のバージ ョ ンでは、 Rd または Rm の 一 方 、 ま た<br />
は 両 方 が Hi レジスタである 必 要 があり ます。 <strong>ARM</strong>v6 以 降<br />
のバージ ョ ンに、 この 制 限 は 適 用 されません。<br />
アーキテクチャ<br />
#imm16 形 式 の <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。 その 他 の 形 式 の<br />
<strong>ARM</strong> 命 令 は <strong>ARM</strong> アーキテ ク チ ャ のすべてのバージ ョ ンで 使 用 で き ます。<br />
これらの 32 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
これらの 16 ビッ ト Thumb 命 令 は、 <strong>ARM</strong> アーキテクチャのすべての T バリア<br />
ントで 使 用 できます。<br />
例<br />
MVNNE r11, #0xF000000B ; <strong>ARM</strong> only. This constant is not available in T2.<br />
誤 用 例<br />
MVN pc,r3,ASR r0 ; pc not permitted with register controlled shift<br />
4-66 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.3.8 MOVT<br />
上 位 にデータ を 代 入 する 命 令 です。 レジスタの 下 位 ハーフワードに 影 響 を 及<br />
ぼさずに、 上 位 ハーフワードに 16 ビットのイミディエート 値 を 書 き 込 みま<br />
す。<br />
構 文<br />
MOVT{cond} Rd, #immed_16<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
Rd デスティネーシ ョ ンレジスタを 指 定 します。 Rd を pc にする こ と<br />
はでき ません。<br />
immed_16 16 ビ ッ ト の 即 定 値 を 指 定 し ます。<br />
使 用 法<br />
MOVT は、immed_16 を Rd [31:16] に 書 き 込 みます。 この 書 き 込 みが Rd [15:0] に 影 響<br />
するこ とはあ り ません。<br />
MOV と MOVT の 命 令 対 で、 任 意 の 32 ビ ッ ト 定 数 を 生 成 できます。<br />
「MOV32 疑 似 命 令 」 (ページ 4-168) も 参 照 して 下 さい。<br />
条 件 フ ラ グ<br />
こ の 命 令 に よ る フ ラ グへの 影 響 はあ り ません。<br />
アーキテクチャ<br />
この <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
この 32 ビッ ト Thumb 命 令 は <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
こ の 命 令 の 16 ビット Thumb バージ ョ ンはあ り ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-67<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.3.9 TST、 TEQ<br />
ビットテストと 等 価 テストです。<br />
構 文<br />
TST{cond} Rn, Operand2<br />
TEQ{cond} Rn, Operand2<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond<br />
Rn<br />
Operand2<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
第 1 オペラ ン ド を 保 持 する <strong>ARM</strong> レジスタを 指 定 します。<br />
フレキシブル 第 2 オペラ ン ド を 指 定 し ます。 このオプショ ンの 詳<br />
細 については、 「フレキシブル 第 2 オペラ ン ド」 (ページ 4-47)<br />
を 参 照 して 下 さい。<br />
使 用 法<br />
これらの 命 令 は、 レジスタ 内 の 値 を Operand2 に 対 し てテス ト し ます。 結 果 に 基<br />
づいて 条 件 フ ラ グ を 更 新 し ますが、 結 果 はどのレ ジ ス タ に も 入 れません。<br />
TST 命 令 は Rn の 値 と Operand2 の 値 を 使 用 し てビ ッ ト ご と の 論 理 積 を 取 り ます。<br />
結 果 が 破 棄 さ れる こ と を 除 けば、 ANDS 命 令 と 同 じ です。<br />
TEQ 命 令 は Rn の 値 と Operand2 の 値 を 使 用 し てビ ッ ト ご と の 排 他 的 論 理 和<br />
(XOR) を 取 り ます。 結 果 が 破 棄 さ れる こ と を 除 けば、 EORS 命 令 と 同 じ です。<br />
2 つの 値 が 等 しいかど う かをテス ト するには TEQ 命 令 を 使 用 します。 その 際 、<br />
CMP とは 異 なり、 V フラグまたは C フ ラ グに 影 響 する こ と はあ り ません。<br />
TEQ は 値 の 符 号 をテ ス ト するのに も 役 立 ちます。 比 較 後 の N フラグは、 2 つの<br />
オペラ ン ド の 符 号 ビ ッ ト の 排 他 的 論 理 和 (XOR) になり ます。<br />
pc の 使 用<br />
<strong>ARM</strong> 命 令 には、 以 下 の 制 約 条 件 が 適 用 さ れます。<br />
• Rn に pc (r15) を 指 定 し てい る 場 合 、 使 用 さ れる 値 は 「 命 令 のア ド レ ス<br />
+ 8」 となり ます。<br />
4-68 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
• レ ジ ス タ 制 御 シフ ト を 行 う データ 処 理 命 令 の 場 合 は、 オペラ ン ド に pc<br />
は 使 用 でき ません (「フレキシブル 第 2 オペラ ン ド」 (ページ 4-47) を 参<br />
照 )。<br />
Thumb-2 命 令 では Rn および Operand2. に 使 用 でき ません。<br />
条 件 フ ラ グ<br />
これらの 命 令 では、 以 下 のよ うになり ます。<br />
• 結 果 に 応 じ て N フラグおよび Z フラグを 更 新 します。<br />
• Operand2 の 計 算 中 に C フ ラ グ を 更 新 する こ と が 可 能 です (「フレキシブ<br />
ル 第 2 オペラ ン ド」 (ページ 4-47) を 参 照 )。<br />
• V フラグは 更 新 しません。<br />
16 ビット 命 令<br />
TST 命 令 は、 Thumb-2 以 前 の Thumb コード 内 では 次 の 形 式 で 使 用 できます。<br />
また、 Thumb-2 コー ド 内 で 使 用 する と きは 16 ビッ ト 命 令 になります。<br />
TST Rn, Rm<br />
Rn および Rm は 共 に Lo レジスタである 必 要 があり ます。<br />
サンプル<br />
TST<br />
TEQEQ<br />
TSTNE<br />
r0, #0x3F8<br />
r10, r9<br />
r1, r5, ASR r1<br />
誤 用 例<br />
TEQ pc, r1, ROR r0 ; pc not permitted with register<br />
; controlled shift<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-69<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.3.10 SEL<br />
APSR の GE フ ラ グの 状 態 に 基 づいて、 各 オペラ ン ド か ら バ イ ト を 選 択 する 命<br />
令 です。<br />
構 文<br />
SEL{cond} {Rd}, Rn, Rm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
Rd デステ ィネーシ ョ ンレジスタを 指 定 します。<br />
Rn 第 1 オペラ ン ド を 保 持 する レジス タ を 指 定 し ます。<br />
Rm<br />
第 2 オペラ ン ド を 保 持 する レジス タ を 指 定 し ます。<br />
演 算<br />
SEL 命 令 は、 APSR の GE フラグに 基 づいて、Rn または Rm か ら バ イ ト を 選 択 し<br />
ます。<br />
• GE[0] が 設 定 されている 場 合 は、Rd[7:0] が Rn[7:0] から 取 得 され、それ 以<br />
外 の 場 合 は Rm[7:0] から 取 得 されます。<br />
• GE[1] が 設 定 されている 場 合 は、 Rd[15:8] が Rn[15:8] から 取 得 され、 それ<br />
以 外 の 場 合 は Rm[15:8] から 取 得 されます。<br />
• GE[2] が 設 定 されている 場 合 は、 Rd[23:16] が Rn[23:16] から 取 得 され、 そ<br />
れ 以 外 の 場 合 は Rm[23:16] か ら 取 得 さ れます。<br />
• GE[3] が 設 定 されている 場 合 は、 Rd[31:24] が Rn[31:24] から 取 得 され、 そ<br />
れ 以 外 の 場 合 は Rm[31:24] か ら 取 得 さ れます。<br />
使 用 法<br />
Rd、 Rn、 または Rm に r15 を 使 用 しないで 下 さい。<br />
SEL 命 令 は、 符 号 付 き 並 列 命 令 の 後 に 使 用 し ます (「 並 列 加 算 と 並 列 減 算 」<br />
(ページ 4-106) を 参 照 )。 この 命 令 を 使 用 して、 複 数 バイ ト データまたはハー<br />
フ ワー ド データ の 最 大 値 や 最 小 値 を 選 択 で き ます。<br />
条 件 フ ラ グ<br />
この 命 令 によ る フ ラ グへの 影 響 はあ り ません。<br />
4-70 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
アーキテクチャ<br />
この <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6 以 降 で 使 用 で き ます。<br />
この 32 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。 ただ し、<br />
<strong>ARM</strong>v7-M プロファイルでは 使 用 できません。<br />
こ の 命 令 の 16 ビット Thumb バージ ョ ンはあ り ません。<br />
サンプル<br />
SEL<br />
SELLT<br />
r0, r4, r5<br />
r4, r0, r4<br />
以 下 の 命 令 シーケン スは、 r1 と r2 の 各 バイ ト の 符 号 な し 最 小 値 と 等 し く な る<br />
ように r4 の 対 応 するバイ ト を 設 定 し ます。<br />
USUB8<br />
SEL<br />
r4, r1, r2<br />
r4, r2, r1<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-71<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.3.11 REV、 REV16、 REVSH、 RBIT<br />
ワー ド 内 ま たはハーフ ワー ド 内 で、 バ イ ト ま たはビ ッ ト を 反 転 する 命 令 です。<br />
構 文<br />
op{cond} Rd, Rn<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
cond<br />
Rd<br />
Rn<br />
以 下 のいずれかを 指 定 し ます。<br />
REV<br />
REV16<br />
REVSH<br />
RBIT<br />
ワード 内 のバイ ト 順 序 を 反 転 させます。<br />
各 ハーフ ワー ド 内 のバ イ ト 順 序 を 独 自 に 反 転 させます。<br />
下 位 ハーフ ワー ド 内 のバイ ト 順 序 を 反 転 させ、 それを<br />
32 ビ ッ ト に 符 号 拡 張 し ます。<br />
32 ビッ トワード 内 のビッ ト 順 序 を 反 転 させます。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
デステ ィネーシ ョ ンレジスタを 指 定 します。 Rd に r15 は 指 定 でき<br />
ません。<br />
オペラ ン ド を 保 持 する レ ジ ス タ を 指 定 し ます。 Rn に r15 は 指 定 で<br />
きません。<br />
使 用 法<br />
以 下 の 命 令 を 使 用 し て、 エンデ ィ ア ン 方 式 を 変 更 で き ます。<br />
REV<br />
REV16<br />
REVSH<br />
32 ビットのビッグエンディアンデータをリ トルエンディアン<br />
データ に 変 換 、 ま たは 32 ビッ トのリ トルエンディアンデータを<br />
ビッグエンディアンデータに 変 換 します。<br />
16 ビットのビッグエンディアンデータをリ トルエンディアン<br />
データ に 変 換 、 ま たは 16 ビッ トのリ トルエンディアンデータを<br />
ビッグエンディアンデータに 変 換 します。<br />
次 のいずれかの 変 換 を 行 います。<br />
• 16 ビ ッ ト の 符 号 付 き ビ ッ グエンデ ィ ア ンデータ を 32 ビッ<br />
トの 符 号 付 き リ トルエンディアンデータに 変 換 します。<br />
• 16 ビ ッ ト の 符 号 付 き リ ト ルエンデ ィ ア ンデータ を 32 ビッ<br />
トの 符 号 付 きビッグエンディアンデータに 変 換 します。<br />
4-72 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
条 件 フ ラ グ<br />
こ れら の 命 令 に よ る フ ラ グへの 影 響 はあ り ません。<br />
16 ビット 命 令<br />
これらの 命 令 は、 Thumb-2 以 前 の Thumb コード 内 では 次 の 形 式 で 使 用 できま<br />
す。 ま た、 Thumb-2 コード 内 で 使 用 する と きは 16 ビッ ト 命 令 になります。<br />
REV Rd, Rm<br />
REV16 Rd, Rm<br />
REVSH Rd, Rm<br />
Rd および Rm は 共 に Lo レジスタである 必 要 があり ます。<br />
Rd および Rm は 共 に Lo レジスタである 必 要 があり ます。<br />
Rd および Rm は 共 に Lo レジスタである 必 要 があり ます。<br />
アーキテクチャ<br />
RBIT を 除 く 上 記 の <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6 以 降 で 使 用 で き ます。<br />
<strong>ARM</strong> 命 令 の RBIT は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
これらの 32 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
これらの 16 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6 以 降 のすべての T バリアントで 使<br />
用 でき ます。<br />
サンプル<br />
REV r3, r7<br />
REV16 r0, r0<br />
REVSH r0, r5 ; Reverse Signed Halfword<br />
REVHS r3, r7 ; Reverse with Higher or Same condition<br />
RBIT r7, r8<br />
4.3.12 ASR、 LSL、 LSR、 ROR、 RRX<br />
算 術 右 シフ ト 、 論 理 左 シ フ ト 、 論 理 右 シ フ ト 、 右 ロ テー ト 、 および 拡 張 付 き<br />
右 ロテート です。<br />
これらの 命 令 は、 第 2 オペラ ン ド レジス タがシフ ト される MOV 命 令 と 同 じ 意 味<br />
です。<br />
構 文<br />
op{S}{cond} Rd, Rm, Rs<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-73<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
op{S}{cond} Rd, Rm, #sh<br />
RRX{S}{cond} Rd, Rm<br />
各 パ ラ メ ータには 以 下 の 意 味 があ り ます。<br />
op<br />
S<br />
Rd<br />
Rm<br />
Rs<br />
ASR、 LSL、 LSR、 ROR のいずれかを 指 定 し ます。<br />
任 意 に 指 定 で き る 接 尾 文 字 です。 S が 指 定 されている 場 合 は、 演<br />
算 結 果 に 基 づいて 条 件 コー ド フ ラ グが 更 新 さ れます (「 条 件 実<br />
行 」 (ページ 2-20) を 参 照 )。<br />
デステ ィネーシ ョ ンレジスタを 指 定 します。<br />
第 1 オペラ ン ド を 保 持 する レジス タ を 指 定 し ます。 このオペラン<br />
ドは 右 にシフト されます。<br />
Rm の 値 に 適 用 する シ フ ト 値 を 保 持 する レ ジ ス タ を 指 定 し ます。 最<br />
下 位 バ イ ト のみが 使 用 さ れます。<br />
sh シフ ト 定 数 を 指 定 します。 指 定 可 能 な 値 の 範 囲 は、 命 令 に よ って<br />
異 な り ます。<br />
ASR 1 ~ 32 のシフ ト が 可 能 です<br />
LSL<br />
LSR<br />
ROR<br />
0 ~ 31 のシフ ト が 可 能 です<br />
1 ~ 32 のシフ ト が 可 能 です<br />
1 ~ 31 のシフ ト が 可 能 です<br />
使 用 法<br />
ASR は、 レジ ス タの 内 容 を 2 のべき 乗 で 除 算 し た、 符 号 付 きの 値 を 求 めます。<br />
空 の 左 のビ ッ ト 位 置 には、 符 号 ビ ッ ト がコ ピーされます。<br />
LSL は、 レジ ス タ を 2 のべき 乗 で 乗 算 した 値 を 求 めます。LSR は、 レジス タ を 2<br />
の 可 変 乗 で 除 算 し た、 符 号 な し の 値 を 求 めます。 いずれの 命 令 で も、 空 の<br />
ビット 位 置 には 0 が 挿 入 されます。<br />
ROR は、 レジス タの 内 容 を 任 意 の 値 でロ テー ト し た 値 を 求 めます。 ロテートの<br />
結 果 右 端 か ら 溢 れたビ ッ ト は、 空 の 左 のビ ッ ト 位 置 に 挿 入 さ れます。<br />
RRX は、 レジ ス タの 内 容 を 右 に 1 ビ ッ ト シフ ト した 値 を 求 めます。 古 いキ ャ<br />
リーフラグはビッ ト [31] にシフ ト されます。 接 尾 文 字 S を 指 定 し た 場 合 、 古 い<br />
ビット [0] がキャ リーフラグに 配 置 されます。<br />
4-74 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
制 約 条 件<br />
Rs を 使 用 する <strong>ARM</strong> 命 令 では、r15 を 使 用 でき ません。 Thumb 命 令 では、r15 も<br />
r13 も 使 用 できません。<br />
条 件 フ ラ グ<br />
S が 指 定 さ れてい る 場 合 、 こ れら の 命 令 は 演 算 結 果 に 基 づいて N と Z の 各 フ<br />
ラグを 更 新 します。<br />
シフ ト 値 が 0 の 場 合 、 C フラグは 影 響 を 受 けません。0 以 外 の 場 合 、 シフ ト ア<br />
ウ ト された 最 後 のビッ トで 更 新 されます。<br />
16 ビット 命 令<br />
これらの 命 令 は、 Thumb-2 以 前 の Thumb コード 内 では 次 の 形 式 で 使 用 できま<br />
す。 ま た、 Thumb-2 コード 内 で 使 用 する と きは 16 ビッ ト 命 令 になります。<br />
ASRS Rd, Rm, #sh<br />
ASRS Rd, Rd, Rs<br />
LSLS Rd, Rm, #sh<br />
LSLS Rd, Rd, Rs<br />
LSRS Rd, Rm, #sh<br />
LSRS Rd, Rd, Rs<br />
RORS Rd, Rd, Rs<br />
Rd および Rm は 共 に Lo レジスタである 必 要 があり ます。<br />
Rd および Rs は 共 に Lo レジスタである 必 要 があり ます。<br />
Rd および Rm は 共 に Lo レジスタである 必 要 があり ます。<br />
Rd および Rs は 共 に Lo レジスタである 必 要 があり ます。<br />
Rd および Rm は 共 に Lo レジスタである 必 要 があり ます。<br />
Rd および Rs は 共 に Lo レジスタである 必 要 があり ます。<br />
Rd および Rs は 共 に Lo レジスタである 必 要 があり ます。<br />
サンプル<br />
ASR<br />
LSLS<br />
LSR<br />
ROR<br />
r7, r8, r9<br />
r1, r2, r3<br />
r4, r5, r6<br />
r4, r5, r6<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-75<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.3.13 SDIV、 UDIV<br />
符 号 付 き 除 算 と 符 号 な し 除 算 です。<br />
構 文<br />
SDIV{cond} {Rd}, Rn, Rm<br />
UDIV{cond} {Rd}, Rn, Rm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond<br />
Rd<br />
Rn<br />
Rm<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
デステ ィネーシ ョ ンレジスタを 指 定 します。<br />
被 除 数 を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
除 数 を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
レジス タの 制 約 条 件<br />
pc と sp は Rd、 Rn または Rm に 使 用 でき ません。<br />
アーキテクチャ<br />
これらの 32 ビッ ト Thumb 命 令 は <strong>ARM</strong>v7-R と <strong>ARM</strong>v7-M のみで 使 用 でき ま<br />
す。<br />
SDIV と UDIV 命 令 には <strong>ARM</strong> バージ ョ ン も 16 ビッ ト Thumb バージ ョ ン も あ り ま<br />
せん。<br />
4-76 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.4 乗 算 命 令<br />
本 章 は 以 下 のセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「MUL、 MLA、 MLS」 (ページ 4-79)<br />
乗 算 命 令 、 積 和 命 令 、 および 積 差 命 令 です (32 ビッ ト× 32 ビットを 計<br />
算 し、 結 果 の 下 位 32 ビットを 返 します)。<br />
• 「UMULL、 UMLAL、 SMULL、 SMLAL」 (ページ 4-81)<br />
符 号 な し / 符 号 付 き long 乗 算 命 令 と long 積 和 命 令 です (32 ビット× 32<br />
ビッ トを 実 行 し、 64 ビ ッ ト の 結 果 ま たは 64 ビ ッ ト の 累 積 値 を 返 し ま<br />
す)。<br />
• 「SMULxy、 SMLAxy」 (ページ 4-83)<br />
符 号 付 き 乗 算 命 令 と 符 号 付 き 積 和 命 令 です (16 ビッ ト× 16 ビットを 実<br />
行 し、 32 ビ ッ ト の 結 果 を 返 し ます)。<br />
• 「SMULWy、 SMLAWy」 (ページ 4-85)<br />
符 号 付 き 乗 算 命 令 と 符 号 付 き 積 和 命 令 です (32 ビッ ト× 16 ビットを 実<br />
行 し、 結 果 の 上 位 32 ビットを 返 します。<br />
• 「SMLALxy」 (ページ 4-87)<br />
符 号 付 き 積 和 命 令 です (16 ビッ ト× 16 ビッ トを 実 行 し、 64 ビッ トの 累<br />
算 値 を 返 し ます)。<br />
• 「SMUAD{X}、 SMUSD{X}」 (ページ 4-89)<br />
積 の 加 算 または 減 算 を 伴 う デュ アル 16 ビ ッ ト 符 号 付 き 乗 算 命 令 です。<br />
• 「SMMUL、 SMMLA、 SMMLS」 (ページ 4-91)<br />
乗 算 命 令 、 積 和 命 令 、 および 積 差 命 令 です (32 ビッ ト× 32 ビットを 実<br />
行 し、 結 果 の 上 位 32 ビットを 返 します)。<br />
• 「SMLAD、 SMLSD」 (ページ 4-93)<br />
デュアル 16 ビ ッ ト 符 号 付 き 乗 算 を 実 行 し、 積 の 加 算 または 減 算 と、 32<br />
ビッ トの 累 算 を 行 う 命 令 です。<br />
• 「SMLALD、 SMLSLD」 (ページ 4-95)<br />
デュアル 16 ビ ッ ト 符 号 付 き 乗 算 を 実 行 し、 32 ビ ッ ト の 積 の 加 算 ま たは<br />
減 算 と 、 64 ビ ッ ト の 累 算 を 行 う 命 令 です。<br />
• 「UMAAL」 (ページ 4-97)<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-77<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
符 号 な し 積 和 累 算 long 命 令 です。<br />
• 「MIA、 MIAPH、 MIAxy」 (ページ 4-98)<br />
内 部 積 算 を 伴 う 乗 算 (XScale コプロセッサ 0 命 令 ) です。<br />
4-78 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.4.1 MUL、 MLA、 MLS<br />
符 号 付 き ま たは 符 号 な し の 32 ビ ッ ト オペラ ン ド を 使 用 し て 乗 算 、 積 和 、 およ<br />
び 積 差 を 実 行 し、 結 果 の 下 位 32 ビッ トを 返 します。<br />
構 文<br />
MUL{S}{cond} {Rd}, Rn, Rm<br />
MLA{S}{cond} Rd, Rn, Rm, Ra<br />
MLS{cond} Rd, Rn, Rm, Ra<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond<br />
S<br />
Rd<br />
Rn?Rm<br />
Ra<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
任 意 に 指 定 で き る 接 尾 文 字 です。 S が 指 定 さ れてい る 場 合 は、 演<br />
算 結 果 に 基 づいて 条 件 コー ド フ ラ グが 更 新 さ れます (「 条 件 実<br />
行 」 (ページ 2-20) を 参 照 )。<br />
デスティネーシ ョ ンレジスタを 指 定 します。<br />
乗 算 する 値 を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
加 算 する 値 ま たは 引 かれる 値 を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
使 用 法<br />
MUL 命 令 は Rn と Rm の 値 を 乗 算 し、 演 算 結 果 の 下 位 32 ビットを Rd に 返 し ます。<br />
MLA 命 令 は Rn と Rm の 値 を 乗 算 し、 Ra の 値 を 加 算 して、 演 算 結 果 の 下 位 32 ビッ<br />
トを Rd に 返 し ます。<br />
MLS 命 令 は Rn と Rm の 値 を 乗 算 し、 その 結 果 を Ra の 値 か ら 減 算 し て、 最 終 的 な<br />
演 算 結 果 の 下 位 32 ビッ トを Rd に 返 し ます。<br />
Rd、 Rn、 Rm、 および Ra に r15 を 使 用 しないで 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-79<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
条 件 フ ラ グ<br />
S が 指 定 さ れてい る 場 合 、 MUL と MLA では、 以 下 のよ う にな り ます。<br />
• 結 果 に 応 じ て N フラグおよび Z フラグを 更 新 します。<br />
• <strong>ARM</strong>v4 以 前 のプ ロ セ ッ サでは、 C フラグおよび V フラグを 破 棄 します。<br />
• <strong>ARM</strong>v5 以 降 のプ ロ セ ッ サでは、 C フラグまたは V フラグへの 影 響 はあ<br />
りません。<br />
Thumb 命 令<br />
MUL 命 令 は、 Thumb-2 以 前 の Thumb コード 内 では 次 の 形 式 で 使 用 できます。<br />
また、 Thumb-2 コード 内 で 使 用 する と きは 16 ビッ ト 命 令 になります。<br />
MULS Rd, Rn, Rd<br />
Rd および Rn は 共 に Lo レジスタである 必 要 があり ます。<br />
条 件 コー ド のフ ラ グ を 更 新 で き る Thumb 乗 算 命 令 は 他 にはあ り ません。<br />
アーキテクチャ<br />
<strong>ARM</strong> 命 令 MUL および MLA は、 <strong>ARM</strong> アーキテクチャのすべてのバージ ョ ンで 使<br />
用 でき ます。<br />
MLS 命 令 の <strong>ARM</strong> は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
これらの 32 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
16 ビット Thumb の MULS 命 令 は、 <strong>ARM</strong> アーキテクチャのすべての T バリアン<br />
トで 使 用 できます。<br />
サンプル<br />
MUL<br />
MLA<br />
MULS<br />
MULLT<br />
MLS<br />
r10, r2, r5<br />
r10, r2, r1, r5<br />
r0, r2, r2<br />
r2, r3, r2<br />
r4, r5, r6, r7<br />
4-80 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.4.2 UMULL、 UMLAL、 SMULL、 SMLAL<br />
符 号 付 き / 符 号 な し long 乗 算 命 令 と 任 意 に 指 定 で き る 積 算 命 令 です (32 ビッ<br />
ト× 32 ビッ トを 実 行 し、 64 ビ ッ ト の 積 算 値 と 結 果 を 返 し ます)。<br />
構 文<br />
Op{S}{cond} RdLo, RdHi, Rn, Rm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
Op<br />
S<br />
cond<br />
RdLo?RdHi<br />
Rn?Rm<br />
UMULL、 UMLAL、 SMULL、 SMLAL のいずれかを 指 定 し ます。<br />
任 意 に 指 定 で き る 接 尾 文 字 です。 <strong>ARM</strong> 状 態 でのみ 使 用 で き ま<br />
す。 S が 指 定 さ れてい る 場 合 は、 演 算 結 果 に 基 づいて 条 件 コー ド<br />
フラグが 更 新 されます (「 条 件 実 行 」 (ページ 2-20) を 参 照 )。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
デスティネーシ ョ ンレジスタを 指 定 します。 UMLAL および SMLAL で<br />
は、 これらのレジ ス タに 累 算 値 も 保 存 されます。 RdLo と RdHi に<br />
は、 それぞれ 異 な る レ ジ ス タ を 指 定 する 必 要 があ り ます。<br />
オペラ ン ド を 保 持 する <strong>ARM</strong> レジスタを 指 定 します。<br />
RdHi、 RdLo、 Rn、 または Rm に r15 を 使 用 しないで 下 さい。<br />
使 用 法<br />
UMULL 命 令 は Rn と Rm の 値 を 符 号 な し 整 数 と 解 釈 し ます。 これらの 整 数 を 乗 算 し<br />
て、 演 算 結 果 の 下 位 32 ビッ トを RdLo に 返 し、 上 位 32 ビッ トを RdHi に 返 し ま<br />
す。<br />
UMLAL 命 令 は Rn と Rm の 値 を 符 号 な し 整 数 と 解 釈 し ます。 これらの 整 数 を 乗 算 し<br />
て 得 られた 64 ビ ッ ト の 演 算 結 果 を、 RdHi と RdLo が 保 持 し ている 64 ビットの<br />
符 号 な し 整 数 に 加 算 し ます。<br />
SMULL 命 令 は、 Rn と Rm の 値 を、 2 の 補 数 と な る 符 号 付 き 整 数 と 解 釈 し ます。 こ<br />
れら の 整 数 を 乗 算 し て、 演 算 結 果 の 下 位 32 ビッ トを RdLo に 返 し、 上 位 32<br />
ビッ トを RdHi に 返 し ます。<br />
SMLAL 命 令 は、 Rn と Rm の 値 を、 2 の 補 数 と な る 符 号 付 き 整 数 と 解 釈 し ます。 こ<br />
れらの 整 数 を 乗 算 して 得 られた 64 ビ ッ ト の 演 算 結 果 を、 RdHi と RdLo が 保 持 し<br />
ている 64 ビ ッ ト の 符 号 付 き 整 数 に 加 算 し ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-81<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
条 件 フ ラ グ<br />
S が 指 定 さ れてい る 場 合 、 こ れ ら の 命 令 では、 以 下 の よ う にな り ます。<br />
• 結 果 に 応 じ て N フラグおよび Z フラグを 更 新 します。<br />
• C フラグまたは V フ ラ グは 更 新 し ません。<br />
アーキテクチャ<br />
これらの <strong>ARM</strong> 命 令 は、 <strong>ARM</strong> アーキテ ク チ ャ のすべてのバージ ョ ンで 使 用 で<br />
きます。<br />
これらの 32 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
これらの 命 令 の 16 ビッ ト Thumb バージ ョ ンはあ り ません。<br />
サンプル<br />
UMULL<br />
UMLALS<br />
r0, r4, r5, r6<br />
r4, r5, r3, r8<br />
4-82 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.4.3 SMULxy、 SMLAxy<br />
符 号 付 き 乗 算 命 令 と 積 和 命 令 です (16 ビッ ト× 16 ビッ トを 実 行 し、32 ビッ<br />
ト の 積 算 値 と 結 果 を 返 し ます)。<br />
構 文<br />
SMUL{cond} {Rd}, Rn, Rm<br />
SMLA{cond} Rd, Rn, Rm, Ra<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
<br />
<br />
cond<br />
Rd<br />
Rn?Rm<br />
Ra<br />
B または T を 指 定 し ます。 Rn の 下 位 ビ ッ ト (ビ ッ ト [15:0]) を 使 用<br />
する 場 合 は B を、Rn の 上 位 ビ ッ ト (ビ ッ ト [31:16]) を 使 用 する 場<br />
合 は T を 指 定 します。<br />
B または T を 指 定 し ます。 Rm の 下 位 ビ ッ ト (ビ ッ ト [15:0]) を 使 用<br />
する 場 合 は B を、Rm の 上 位 ビ ッ ト (ビ ッ ト [31:16]) を 使 用 する 場<br />
合 は T を 指 定 します。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
デスティネーシ ョ ンレジスタを 指 定 します。<br />
乗 算 する 値 を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
加 算 する 値 を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
使 用 法<br />
Rd、 Rn、 Rm、 および Ra に r15 を 使 用 しないで 下 さい。<br />
SMULxy 命 令 は、 Rn と Rm の 指 定 さ れた 上 位 半 分 ま たは 下 位 半 分 の 16 ビッ ト 符 号<br />
付 き 整 数 を 乗 算 し、 32 ビ ッ ト の 演 算 結 果 を Rd に 返 し ます。<br />
SMLAxy 命 令 は、 Rn と Rm の 指 定 さ れた 上 位 半 分 ま たは 下 位 半 分 の 16 ビッ ト 符 号<br />
付 き 整 数 を 乗 算 し、 32 ビ ッ ト の 演 算 結 果 を Ra の 32 ビッ ト 値 に 加 算 し、 その<br />
結 果 を Rd に 返 し ます。<br />
条 件 フ ラ グ<br />
これらの 命 令 による N、 Z、 C、 または V フラグへの 影 響 はありません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-83<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
積 算 中 にオーバーフ ローが 発 生 し た 場 合 、 SMLAxy によって Q フラグが 設 定 さ<br />
れます。 Q フ ラ グの 状 態 を 読 み 出 すには、 MRS 命 令 を 使 用 し ます (「MRS」<br />
(ページ 4-143) を 参 照 )。<br />
注<br />
SMLAxy によって Q フラグがクリアされることはありません。 Q フラグをク リア<br />
するには、 MSR 命 令 を 使 用 し ます (「MSR」 (ページ 4-145) を 参 照 )。<br />
アーキテクチャ<br />
これらの <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6 以 降 、 および <strong>ARM</strong>v5 の E バリアントで 使 用<br />
できます。<br />
この 32 ビット Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。 ただ し、<br />
<strong>ARM</strong>v7-M プロファイルでは 使 用 できません。<br />
これらの 命 令 の 16 ビッ ト Thumb バージ ョ ンはあ り ません。<br />
サンプル<br />
SMULTBEQ<br />
SMLABBNE<br />
SMLABT<br />
r8, r7, r9<br />
r0, r2, r1, r10<br />
r0, r0, r3, r5<br />
4-84 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.4.4 SMULWy、 SMLAWy<br />
符 号 付 き ワ イ ド 乗 算 と 符 号 付 き ワ イ ド 積 和 を 実 行 し ます (32 ビッ ト× 16 ビッ<br />
ト を 実 行 し、 演 算 結 果 の 上 位 32 ビッ トを 返 します)。<br />
構 文<br />
SMULW{cond} {Rd}, Rn, Rm<br />
SMLAW{cond} Rd, Rn, Rm, Ra<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
<br />
cond<br />
Rd<br />
Rn?Rm<br />
Ra<br />
B または T を 指 定 し ます。 Rm の 下 位 ビ ッ ト (ビ ッ ト [15:0]) を 使 用<br />
する 場 合 は B を、Rm の 上 位 ビ ッ ト (ビ ッ ト [31:16]) を 使 用 する 場<br />
合 は T を 指 定 します。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
デスティネーシ ョ ンレジスタを 指 定 します。<br />
乗 算 する 値 を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
加 算 する 値 を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
使 用 法<br />
Rd、 Rn、 Rm、 および Ra に r15 を 使 用 しないで 下 さい。<br />
SMULWy 命 令 は、Rm の 指 定 さ れた 上 位 半 分 ま たは 下 位 半 分 の 符 号 付 き 整 数 と 、 Rn<br />
の 符 号 付 き 整 数 を 乗 算 し、 48 ビ ッ ト の 演 算 結 果 の 上 位 32 ビッ トを Rd に 返 し<br />
ます。<br />
SMLAWy 命 令 は、 Rm の 選 択 さ れた 上 位 半 分 ま たは 下 位 半 分 の 符 号 付 き 整 数 と Rn<br />
の 符 号 付 き 整 数 を 乗 算 し、 32 ビ ッ ト の 演 算 結 果 を Ra 32 ビッ ト 値 に 加 算 し、<br />
その 結 果 を Rd に 返 し ます。<br />
条 件 フ ラ グ<br />
これらの 命 令 による N、 Z、 C、 または V フラグへの 影 響 はありません。<br />
累 算 中 にオーバーフ ローが 発 生 し た 場 合 、 SMLAWy によって Q フラグが 設 定 さ<br />
れます (「MRS」 (ページ 4-143) を 参 照 )。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-85<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
アーキテクチャ<br />
これらの <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6 以 降 、 および <strong>ARM</strong>v5 の E バリアントで 使 用<br />
できます。<br />
この 32 ビット Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。 ただ し、<br />
<strong>ARM</strong>v7-M プロファイルでは 使 用 できません。<br />
これらの 命 令 の 16 ビッ ト Thumb バージ ョ ンはあ り ません。<br />
4-86 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.4.5 SMLALxy<br />
16 ビッ トオペランドと 64 ビ ッ ト のアキュムレータを 使 った 符 号 付 き 積 和 命 令<br />
構 文<br />
SMLAL{cond} RdLo, RdHi, Rn, Rm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
<br />
<br />
cond<br />
RdHi?RdLo<br />
Rn?Rm<br />
B または T を 指 定 し ます。 Rn の 下 位 ビ ッ ト (ビ ッ ト [15:0]) を 使 用<br />
する 場 合 は B を、Rn の 上 位 ビ ッ ト (ビ ッ ト [31:16]) を 使 用 する 場<br />
合 は T を 指 定 します。<br />
B または T を 指 定 し ます。 Rm の 下 位 ビ ッ ト (ビ ッ ト [15:0]) を 使 用<br />
する 場 合 は B を、Rm の 上 位 ビ ッ ト (ビ ッ ト [31:16]) を 使 用 する 場<br />
合 は T を 指 定 します。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
デスティネーシ ョ ンレジスタを 指 定 します。 これらのレジスタは<br />
累 算 値 も 保 持 し ます。 RdHi と RdLo には、 それぞれ 異 なる レジス タ<br />
を 指 定 する 必 要 があ り ます。<br />
乗 算 する 値 を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
RdHi、 RdLo、 Rn、 または Rm に r15 を 使 用 しないで 下 さい。<br />
使 用 法<br />
SMLALxy 命 令 は、 Rm の 指 定 さ れた 上 位 半 分 ま たは 下 位 半 分 の 符 号 付 き 整 数 を、<br />
Rn の 指 定 さ れた 上 位 半 分 ま たは 下 位 半 分 の 符 号 付 き 整 数 と 乗 算 し、 32 ビット<br />
の 演 算 結 果 を RdHi と RdLo が 保 持 する 64 ビッ ト 値 に 加 算 します。<br />
条 件 フ ラ グ<br />
こ の 命 令 に よ る フ ラ グへの 影 響 はあ り ません。<br />
注<br />
SMLALxy 命 令 に よ って 例 外 が 発 生 する こ と はあ り ません。 この 命 令 でオーバー<br />
フ ローが 発 生 する と 、 警 告 がないま ま 演 算 結 果 の 一 部 が 溢 れた 桁 に よ って 上<br />
書 きされます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-87<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
アーキテクチャ<br />
この <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6 以 降 、 および <strong>ARM</strong>v5 の E バリアントで 使 用 でき<br />
ます。<br />
この 32 ビット Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。 ただ し、<br />
<strong>ARM</strong>v7-M プロファイルでは 使 用 できません。<br />
この 命 令 の 16 ビット Thumb バージ ョ ンはあ り ません。<br />
サンプル<br />
SMLALTB<br />
SMLALBTVS<br />
r2, r3, r7, r1<br />
r0, r1, r9, r2<br />
4-88 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.4.6 SMUAD{X}、 SMUSD{X}<br />
任 意 でオペラン ドの 半 分 を 交 換 でき る、 デュアル 16 ビ ッ ト 符 号 付 き 積 和 命 令<br />
と 積 差 命 令 です。<br />
構 文<br />
op{X}{cond} {Rd}, Rn, Rm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
次 のいずれかを 指 定 し ます。<br />
SMUAD デュアル 乗 算 後 に 積 を 加 算 します。<br />
SMUSD デュアル 乗 算 後 に 積 を 減 算 します。<br />
X 任 意 に 指 定 で き るパ ラ メ ータ です。 X が 指 定 されている 場 合 は、<br />
乗 算 が 行 われる 前 に、 第 2 オペラ ン ド の 上 位 ハーフ ワード と 下 位<br />
ハーフ ワー ド が 入 れ 替 わ り ます。<br />
cond<br />
Rd<br />
Rn?Rm<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
デスティネーシ ョ ンレジスタを 指 定 します。<br />
オペラ ン ド を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
Rd、 Rn、 Rm のいずれにも r15 を 使 用 しないで 下 さい。<br />
使 用 法<br />
SMUAD は、 Rn の 下 位 ハーフ ワード と Rm の 下 位 ハーフ ワード を 乗 算 し、 Rn の 上 位<br />
ハーフ ワー ド と Rm の 上 位 ハーフ ワード を 乗 算 し ます。 次 に、 得 られた 2 つの<br />
積 を 加 算 し、 その 合 計 を Rd にス ト アします。<br />
SMUSD は、 Rn の 下 位 ハーフ ワード と Rm の 下 位 ハーフ ワード を 乗 算 し、 Rn の 上 位<br />
ハーフ ワー ド と Rm の 上 位 ハーフ ワード を 乗 算 し ます。 次 に、 最 初 の 積 から 2<br />
番 目 の 積 を 減 算 し、 その 差 を Rd にス ト アします。<br />
条 件 フ ラ グ<br />
加 算 がオーバーフ ローし た 場 合 、 SMUAD 命 令 に よ って Q フ ラ グが 設 定 さ れま<br />
す。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-89<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
アーキテクチャ<br />
これらの <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6 以 降 、 および <strong>ARM</strong>v5 の E バリアントで 使 用<br />
できます。<br />
この 32 ビット Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。 ただ し、<br />
<strong>ARM</strong>v7-M プロファイルでは 使 用 できません。<br />
これらの 命 令 の 16 ビッ ト Thumb バージ ョ ンはあ り ません。<br />
サンプル<br />
SMUAD<br />
SMUSDXNE<br />
r2, r3, r2<br />
r0, r1, r2<br />
4-90 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.4.7 SMMUL、 SMMLA、 SMMLS<br />
符 号 付 き 上 位 ワー ド 乗 算 命 令 、 符 号 付 き 上 位 ワー ド 乗 算 命 令 の 累 算 、 符 号 付<br />
き 上 位 ワー ド 乗 算 命 令 の 減 算 です。 これらの 命 令 は 32 ビッ トオペランド 間 で<br />
の 演 算 結 果 か ら 上 位 32 ビ ッ ト のみを 使 用 し ます。<br />
構 文<br />
SMMUL{R}{cond} {Rd}, Rn, Rm<br />
SMMLA{R}{cond} Rd, Rn, Rm, Ra<br />
SMMLS{R}{cond} Rd, Rn, Rm, Ra<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
R<br />
cond<br />
Rd<br />
Rn?Rm<br />
Ra<br />
任 意 に 指 定 で き るパ ラ メ ータ です。 R が 指 定 されている 場 合 は 演<br />
算 結 果 の 丸 めが 行 われ、 指 定 されていない 場 合 は 切 り 捨 て ら れ<br />
ます。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
デスティネーシ ョ ンレジスタを 指 定 します。<br />
オペラ ン ド を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
加 算 する 値 ま たは 引 かれる 値 を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
Rd、 Rn、 Rm、 Ra のいずれにも r15 を 使 用 しないで 下 さい。<br />
演 算<br />
SMMUL は Rn と Rm の 値 を 乗 算 し、 64 ビッ ト 結 果 の 上 位 32 ビットを Rd にス ト ア<br />
します。<br />
SMMLA は Rn と Rm の 値 を 乗 算 し、 得 られた 積 の 上 位 32 ビッ トに Ra の 値 を 加 算<br />
し、 その 結 果 を Rd にス ト アします。<br />
SMMLS は、 Rn と Rm の 値 を 乗 算 し て 得 られた 積 を、 32 ビット 左 シフトした Ra の<br />
値 から 減 算 し、 結 果 の 上 位 32 ビッ トを Rd にス ト アします。<br />
オプシ ョ ンの R パ ラ メ ータ が 指 定 さ れてい る 場 合 は、 上 位 32 ビッ トを 取 り 出<br />
す 前 に 0x80000000 が 加 算 されます。 こ の 処 理 に よ って 結 果 の 丸 めが 行 われま<br />
す。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-91<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
条 件 フ ラ グ<br />
こ れら の 命 令 に よ る フ ラ グへの 影 響 はあ り ません。<br />
アーキテクチャ<br />
これらの <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6 以 降 、 および <strong>ARM</strong>v5 の E バリアントで 使 用<br />
できます。<br />
この 32 ビット Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。 ただ し、<br />
<strong>ARM</strong>v7-M プロファイルでは 使 用 できません。<br />
これらの 命 令 の 16 ビッ ト Thumb バージ ョ ンはあ り ません。<br />
サンプル<br />
SMMULGE<br />
SMMULR<br />
r6, r4, r3<br />
r2, r2, r2<br />
4-92 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.4.8 SMLAD、 SMLSD<br />
デュアル 16 ビ ッ ト 符 号 付 き 乗 算 を 実 行 し、 積 の 加 算 または 減 算 と、 32 ビッ ト<br />
の 積 算 を 行 う 命 令 です。<br />
構 文<br />
op{X}{cond} Rd, Rn, Rm, Ra<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
cond<br />
次 のいずれかを 指 定 し ます。<br />
SMLAD デュアル 乗 算 を 行 い、 積 の 和 を 累 算 し ます。<br />
SMLSD デュアル 乗 算 を 行 い、 積 の 差 を 累 算 し ます。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
X 任 意 に 指 定 で き るパ ラ メ ータ です。 X が 指 定 されている 場 合 は、<br />
乗 算 が 行 われる 前 に、 第 2 オペラ ン ド の 上 位 ハーフ ワード と 下 位<br />
ハーフ ワー ド が 入 れ 替 わ り ます。<br />
Rd<br />
Rn?Rm<br />
Ra<br />
デスティネーシ ョ ンレジスタを 指 定 します。<br />
オペラ ン ド を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
累 算 オペ ラ ン ド を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
Rd、 Rn、 Rm、 Ra のいずれにも r15 を 使 用 しないで 下 さい。<br />
演 算<br />
SMLAD は Rn の 下 位 ハーフ ワー ド と Rm の 下 位 ハーフ ワード を 乗 算 し、 Rn の 上 位<br />
ハーフ ワー ド と Rm の 上 位 ハーフ ワード を 乗 算 し ます。 次 に、 得 られた 2 つの<br />
積 を Ra の 値 に 加 算 し、 その 結 果 を Rd にス ト アします。<br />
SMLSD は Rn の 下 位 ハーフ ワー ド と Rm の 下 位 ハーフ ワード を 乗 算 し、 Rn の 上 位<br />
ハーフ ワー ド と Rm の 上 位 ハーフ ワード を 乗 算 し ます。 次 に、 最 初 の 積 から 2<br />
番 目 の 積 を 減 算 し、 その 差 を Ra の 値 に 加 算 し て、 結 果 を Rd にス ト アします。<br />
条 件 フ ラ グ<br />
こ れら の 命 令 に よ る フ ラ グへの 影 響 はあ り ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-93<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
アーキテクチャ<br />
これらの <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6 以 降 、 および <strong>ARM</strong>v5 の E バリアントで 使 用<br />
できます。<br />
この 32 ビット Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。 ただ し、<br />
<strong>ARM</strong>v7-M プロファイルでは 使 用 できません。<br />
これらの 命 令 の 16 ビッ ト Thumb バージ ョ ンはあ り ません。<br />
サンプル<br />
SMLSD<br />
SMLSDX<br />
SMLADLT<br />
r1, r2, r0, r7<br />
r11, r10, r2, r3<br />
r1, r2, r4, r1<br />
4-94 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.4.9 SMLALD、 SMLSLD<br />
デュアル 16 ビ ッ ト 符 号 付 き 乗 算 を 実 行 し、 積 の 加 算 または 減 算 と、 64 ビッ ト<br />
の 累 算 を 行 う 命 令 です。<br />
構 文<br />
op{X}{cond} RdLo, RdHi, Rn, Rm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
次 のいずれかを 指 定 し ます。<br />
SMLALD デュアル 乗 算 を 行 い、 積 の 和 を 累 算 し ます。<br />
SMLSLD デュアル 乗 算 を 行 い、 積 の 差 を 累 算 し ます。<br />
X 任 意 に 指 定 で き るパ ラ メ ータ です。 X が 指 定 されている 場 合 は、<br />
乗 算 が 行 われる 前 に、 第 2 オペラ ン ド の 上 位 ハーフ ワード と 下 位<br />
ハーフ ワー ド が 入 れ 替 わ り ます。<br />
cond<br />
RdLo?RdHi<br />
Rn?Rm<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
64 ビ ッ ト の 結 果 を 保 持 するデス テ ィ ネーシ ョ ン レ ジ ス タ を 指 定<br />
します。 これらのレジスタには、64 ビットの 累 算 オペランドも 保<br />
持 されます。 RdHi と RdLo には、 それぞれ 異 な る レ ジ ス タ を 指 定 す<br />
る 必 要 があ り ます。<br />
オペラ ン ド を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
RdLo、 RdHi、 Rn、 Rm のいずれにも r15 を 使 用 しないで 下 さい。<br />
演 算<br />
SMLALD は Rn の 下 位 ハーフ ワー ド と Rm の 下 位 ハーフ ワード を 乗 算 し、 Rn の 上 位<br />
ハーフ ワー ド と Rm の 上 位 ハーフ ワード を 乗 算 し ます。 次 に、 得 られた 2 つの<br />
積 を RdLo、 RdHi の 値 に 加 算 し、 その 合 計 を RdLo?RdHi にス ト アします。<br />
SMLSLD は Rn の 下 位 ハーフ ワー ド と Rm の 下 位 ハーフ ワード を 乗 算 し、 Rn の 上 位<br />
ハーフ ワー ド と Rm の 上 位 ハーフ ワード を 乗 算 し ます。 次 に、 最 初 の 積 から 2<br />
番 目 の 積 を 減 算 し、 その 差 を RdLo?RdHi の 値 に 加 算 し て、 結 果 を RdLo?RdHi にス<br />
トアします。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-95<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
条 件 フ ラ グ<br />
こ れら の 命 令 に よ る フ ラ グへの 影 響 はあ り ません。<br />
アーキテクチャ<br />
これらの <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6 以 降 、 および <strong>ARM</strong>v5 の E バリアントで 使 用<br />
できます。<br />
この 32 ビット Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。 ただ し、<br />
<strong>ARM</strong>v7-M プロファイルでは 使 用 できません。<br />
これらの 命 令 の 16 ビッ ト Thumb バージ ョ ンはあ り ません。<br />
サンプル<br />
SMLALD<br />
SMLSLD<br />
r10, r11, r5, r1<br />
r3, r0, r5, r1<br />
4-96 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.4.10 UMAAL<br />
符 号 な し 積 和 累 算 long 命 令 です。<br />
構 文<br />
UMAAL{cond} RdLo, RdHi, Rn, Rm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond<br />
RdLo?RdHi<br />
Rn?Rm<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
64 ビ ッ ト の 結 果 を 保 持 するデス テ ィ ネーシ ョ ン レ ジ ス タ を 指 定<br />
します。 これらのレジスタには、 32 ビットの 2 つの 累 算 オペラ ン<br />
ド も 保 持 さ れます。 RdLo と RdHi には、 それぞれ 異 なる レジス タ を<br />
指 定 する 必 要 があ り ます。<br />
乗 算 オペ ラ ン ド を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
RdLo、 RdHi、 Rn、 Rm のいずれにも r15 は 使 用 し ないで 下 さ い。<br />
演 算<br />
UMAAL は Rn と Rm の 32 ビ ッ ト 値 を 乗 算 し、 RdHi と RdLo の 2 つの 32 ビッ ト 値 を<br />
加 算 し、 その 64 ビッ トの 結 果 を RdLo, RdHi にス ト アします。<br />
条 件 フ ラ グ<br />
こ の 命 令 に よ る フ ラ グへの 影 響 はあ り ません。<br />
アーキテクチャ<br />
この <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6 以 降 、 および <strong>ARM</strong>v5 の E バリアントで 使 用 でき<br />
ます。<br />
この 32 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。 ただ し、<br />
<strong>ARM</strong>v7-M プロファイルでは 使 用 できません。<br />
こ の 命 令 の 16 ビット Thumb バージ ョ ンはあ り ません。<br />
サンプル<br />
UMAAL<br />
UMAALGE<br />
r8, r9, r2, r3<br />
r2, r0, r5, r3<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-97<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.4.11 MIA、 MIAPH、 MIAxy<br />
内 部 積 和 命 令 です (32 ビッ ト× 32 ビッ トを 実 行 し、 40 ビ ッ ト の 累 算 値 を 返<br />
します)。<br />
パ ッ ク ハーフ ワー ド の 内 部 積 和 命 令 です (16 ビット× 16 ビッ ト× 2 を 実 行<br />
し、 40 ビ ッ ト の 累 算 値 を 返 し ます)。<br />
内 部 積 和 命 令 です (16 ビッ ト× 16 ビッ トを 実 行 し、 40 ビ ッ ト の 累 算 値 を 返<br />
します)。<br />
構 文<br />
MIA{cond} Acc, Rn, Rm<br />
MIAPH{cond} Acc, Rn, Rm<br />
MIA{cond} Acc, Rn, Rm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond<br />
Acc<br />
Rn?Rm<br />
<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
内 部 アキ ュ ム レータ を 指 定 し ます。 標 準 名 は accx で、 x は 0 ~ n<br />
の 整 数 です。 n の 値 はプロセ ッ サによ って 異 な り ます。 現 在 のプ<br />
ロセッサでは 0 が 使 用 されています。<br />
乗 算 する 値 を 保 持 する <strong>ARM</strong> レジスタを 指 定 します。<br />
Rn または Rm に r15 を 使 用 しないで 下 さい。<br />
次 のいずれかを 指 定 し ます。 BB, BT, TB, TT<br />
使 用 法<br />
MIA は Rn と Rm の 符 号 付 き 整 数 を 乗 算 し、 演 算 結 果 を Acc の 40 ビッ ト 値 に 加 算<br />
します。<br />
MIAPH は Rn と Rm の 下 位 半 分 の 符 号 付 き 整 数 の 乗 算 、および Rn と Rm の 上 位 半 分<br />
の 符 号 付 き 整 数 の 乗 算 を 行 い、 32 ビッ トの 2 つの 結 果 を Acc の 40 ビット 値 に<br />
加 算 し ます。<br />
MIAxy 命 令 は Rs の 指 定 さ れた 上 位 半 分 ま たは 下 位 半 分 の 符 号 付 き 整 数 と Rm の<br />
指 定 さ れた 上 位 半 分 ま たは 下 位 半 分 の 符 号 付 き 整 数 を 乗 算 し、 32 ビットの 結<br />
果 を Acc の 40 ビット 値 に 加 算 します。 Rn の 下 位 ビ ッ ト (ビ ッ ト [15:0]) を 使 用<br />
4-98 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
する 場 合 は == B を、 Rn の 上 位 ビ ッ ト (ビ ッ ト [31:16]) を 使 用 する 場 合 は<br />
== T を 指 定 します。 Rm の 下 位 ビ ッ ト (ビ ッ ト [15:0]) を 使 用 する 場 合 は <br />
== B を、Rm の 上 位 ビ ッ ト (ビ ッ ト [31:16]) を 使 用 する 場 合 は == T を 指 定 し<br />
ます。<br />
条 件 フ ラ グ<br />
こ れら の 命 令 に よ る フ ラ グへの 影 響 はあ り ません。<br />
注<br />
こ れら の 命 令 に よ って 例 外 が 発 生 する こ と はあ り ません。 これらの 命 令 で<br />
オーバーフ ローが 発 生 する と 、 警 告 がないま ま 演 算 結 果 の 一 部 が 溢 れた 桁 に<br />
よって 上 書 きされます。<br />
アーキテクチャ<br />
これらの <strong>ARM</strong> コプロセッサ 0 命 令 は、 XScale プロセッサでのみ 使 用 できま<br />
す。<br />
これらの 命 令 の Thumb バージ ョ ンはあ り ません。<br />
サンプル<br />
MIA acc0,r5,r0<br />
MIALE acc0,r1,r9<br />
MIAPH acc0,r0,r7<br />
MIAPHNE acc0,r11,r10<br />
MIABB acc0,r8,r9<br />
MIABT acc0,r8,r8<br />
MIATB acc0,r5,r3<br />
MIATT acc0,r0,r6<br />
MIABTGT acc0,r2,r5<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-99<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.5 サチュレー ト 命 令<br />
こ のセ ク シ ョ ンは 以 下 のサブセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「サチュ レー ト 算 術 演 算 」<br />
• 「QADD、 QSUB、 QDADD、 QDSUB」 (ページ 4-101)<br />
• 「SSAT、 USAT」 (ページ 4-103)<br />
一 部 の 並 列 命 令 も サチュ レー ト 命 令 です。 詳 細 については、 「 並 列 命 令 」<br />
(ページ 4-105) を 参 照 して 下 さい。<br />
4.5.1 サチ ュ レー ト 算 術 演 算<br />
以 下 の 演 算 がサチュ レー ト (SAT) 演 算 です。 つま り、 サチュレート 命 令 に 応<br />
じて、 2 n の 値 は 以 下 のよ う にな り ます。<br />
• 符 号 付 き サチ ュ レー ト 演 算 では、 結 果 が -2 n 未 満 の 場 合 には、 返 さ れる<br />
結 果 は -2 n にな り ます。<br />
• 符 号 な し サチ ュ レー ト 演 算 では、 結 果 が 負 と な る 場 合 には、 返 さ れる 結<br />
果 はゼロ と な り ます。<br />
• 結 果 が 2 n - 1 よ りも 大 きい 場 合 には、 返 される 結 果 は 2 n - 1 となります。<br />
上 記 のいずれかに 当 てはま る 演 算 をサチュ レーシ ョ ン と 呼 びます。 一 部 の 命<br />
令 では、 サチュ レーシ ョ ンが 発 生 する と Q フラグを 設 定 します。<br />
注<br />
サチュ レーシ ョ ンが 発 生 しない 場 合 に、 サチュ レー ト 命 令 によ って Q フラグ<br />
がク リアされることはありません。 Q フラグをク リアするには、MSR 命 令 を 使<br />
用 します (「MSR」 (ページ 4-145) を 参 照 )。<br />
Q フラグは、 他 の 2 つの 命 令 によ って も 設 定 でき ますが (「SMULxy、<br />
SMLAxy」 (ページ 4-83) と 「SMULWy、 SMLAWy」 (ページ 4-85) を 参 照 )、<br />
それらの 命 令 はサチュ レー ト し ません。<br />
4-100 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.5.2 QADD、 QSUB、 QDADD、 QDSUB<br />
–2 31 ≤ x ≤ 2 31 –1 の 符 号 付 き 範 囲 で 演 算 結 果 をサチュ レー ト させる、 符 号 付 き 加<br />
算 、 減 算 、 倍 演 算 と 加 算 、 および 倍 演 算 と 減 算 です。<br />
「 並 列 加 算 と 並 列 減 算 」 (ページ 4-106) も 参 照 して 下 さい。<br />
構 文<br />
op{cond} {Rd}, Rm, Rn<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
cond<br />
Rd<br />
Rm?Rn<br />
QADD、 QSUB、 QDADD、 QDSUB のいずれかを 指 定 し ます。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
デスティネーシ ョ ンレジスタを 指 定 します。<br />
オペラ ン ド を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
Rd、 Rm、 または Rn に r15 を 使 用 しないで 下 さい。<br />
使 用 法<br />
QADD 命 令 は Rm と Rn の 値 を 加 算 し ます。<br />
QSUB 命 令 は Rn の 値 から Rm の 値 を 減 算 し ます。<br />
QDADD 命 令 は SAT(Rm + SAT(Rn * 2)) を 計 算 し ます。 倍 演 算 、 加 算 、 あ る いはその<br />
両 方 で、 サチュ レーシ ョ ンが 発 生 する 可 能 性 があ り ます。 倍 演 算 でサチュ<br />
レーシ ョ ンが 発 生 し、 かつ 加 算 では 発 生 し ない 場 合 、 Q フラグは 設 定 されま<br />
すが、 最 終 結 果 はサチュ レー ト し ていません。<br />
QDSUB 命 令 は SAT(Rm - SAT(Rn * 2)) を 計 算 し ます。 倍 演 算 、 減 算 、 あ る いはその<br />
両 方 で、 サチュ レーシ ョ ンが 発 生 する 可 能 性 があ り ます。 倍 演 算 でサチュ<br />
レーシ ョ ンが 発 生 し、 かつ 減 算 では 発 生 し ない 場 合 、 Q フラグは 設 定 されま<br />
すが、 最 終 結 果 はサチュ レー ト し ていません。<br />
注<br />
これらの 命 令 では、 すべての 値 が 2 の 補 数 の 符 号 付 き 整 数 と し て 処 理 さ れま<br />
す。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-101<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
同 様 の、 <strong>ARM</strong>v6 以 降 でのみ 使 用 可 能 な 並 列 命 令 については、 「 並 列 加 算 と 並<br />
列 減 算 」 (ページ 4-106) を 参 照 して 下 さい。<br />
条 件 フ ラ グ<br />
サチュ レーシ ョ ンが 発 生 する と、 これらの 命 令 によ って Q フラグが 設 定 され<br />
ます。 Q フラグの 状 態 を 読 み 出 すには、 MRS 命 令 を 使 用 し ます (「MRS」 (ペー<br />
ジ 4-143) を 参 照 )。<br />
アーキテクチャ<br />
これらの <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6 以 降 、 および <strong>ARM</strong>v5 の E バリアントで 使 用<br />
できます。<br />
この 32 ビット Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。 ただ し、<br />
<strong>ARM</strong>v7-M プロファイルでは 使 用 できません。<br />
これらの 命 令 の 16 ビッ ト Thumb バージ ョ ンはあ り ません。<br />
サンプル<br />
QADD r0, r1, r9<br />
QDSUBLT r9, r0, r1<br />
4-102 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.5.3 SSAT、 USAT<br />
任 意 のビ ッ ト 位 置 に 対 する 符 号 付 きサチュ レー ト 命 令 と 符 号 な し サチュ レー<br />
ト 命 令 です。 オプシ ョ ン と し て、 サチュ レー ト 前 にシ フ ト を 実 行 で き ます。<br />
SSAT 符 号 付 き の 値 を 符 号 付 き 範 囲 内 でサチュ レー ト し ます。<br />
USAT 符 号 付 き の 値 を 符 号 な し 範 囲 内 でサチュ レー ト し ます。<br />
「SSAT16、 USAT16」 (ページ 4-111) も 参 照 して 下 さい。<br />
構 文<br />
op{cond} Rd, #sat, Rm{, shift}<br />
各 パラ メ ータには 以 下 の 意 味 があ り ます。<br />
op<br />
cond<br />
Rd<br />
sat<br />
Rm<br />
shift<br />
SSAT または USAT を 指 定 します。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
デスティネーシ ョ ンレジスタを 指 定 します。 Rd に r15 は 指 定 でき<br />
ません。<br />
サチュ レー ト させる ビ ッ ト 位 置 を 指 定 し ます。SSAT の 場 合 は 1 ~<br />
32、 USAT の 場 合 は 0 ~ 31 の 値 と な り ます。<br />
オペラ ン ド を 格 納 する レ ジ ス タ を 指 定 し ます。 Rm に r15 は 指 定 で<br />
きません。<br />
任 意 に 指 定 で き る シフ ト です。 以 下 のいずれかを 指 定 する 必 要 が<br />
あります。<br />
ASR #n ただし、 n の 範 囲 は 1 ~ 32 (<strong>ARM</strong>) または 1 ~ 31<br />
(Thumb-2) を 指 定 します。<br />
LSL #n<br />
ただし、 n の 範 囲 は 0 ~ 31 を 指 定 し ます。<br />
演 算<br />
SSAT 命 令 は 指 定 さ れたシ フ ト を 行 い、 その 後 に 符 号 付 き 範 囲 –2 sat–1 ≤ x ≤ 2 sat–1<br />
–1 でサチュ レー ト し ます。<br />
USAT 命 令 は 指 定 さ れたシ フ ト を 行 い、 その 後 に 符 号 な し 範 囲 0 ≤ x ≤ 2 sat – 1 で<br />
サチュ レー ト し ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-103<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
条 件 フ ラ グ<br />
サチュ レーシ ョ ンが 発 生 する と、 これらの 命 令 によ って Q フラグが 設 定 され<br />
ます。 Q フラグの 状 態 を 読 み 出 すには、 MRS 命 令 を 使 用 し ます (「MRS」 (ペー<br />
ジ 4-143) を 参 照 )。<br />
アーキテクチャ<br />
これらの <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6 以 降 で 使 用 で き ます。<br />
これらの 32 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
これらの 命 令 の 16 ビッ ト Thumb バージ ョ ンはあ り ません。<br />
サンプル<br />
SSAT r7, #16, r7, LSL #4<br />
USATNE r0, #7, r5<br />
4-104 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.6 並 列 命 令<br />
こ のセ ク シ ョ ンは 以 下 のサブセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「 並 列 加 算 と 並 列 減 算 」 (ページ 4-106)<br />
バ イ ト 単 位 およびハーフ ワー ド 単 位 の さ ま ざ ま な 加 算 と 減 算 です。<br />
• 「USAD8、 USADA8」 (ページ 4-109)<br />
符 号 な し 絶 対 差 の 和 と 符 号 な し 絶 対 差 の 和 の 累 算 です。<br />
• 「SSAT16、 USAT16」 (ページ 4-111)<br />
並 列 ハーフ ワー ド サチュ レー ト 命 令 です。<br />
こ の 他 に、 並 列 展 開 命 令 も あ り ます。 詳 細 については、 「SXT、 SXTA、 UXT、<br />
UXTA」 (ページ 4-117) を 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-105<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.6.1 並 列 加 算 と 並 列 減 算<br />
バイ ト 単 位 およびハーフ ワー ド 単 位 の さ ま ざ ま な 加 算 と 減 算 です。<br />
構 文<br />
op{cond} {Rd}, Rn, Rm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
<br />
op<br />
次 のいずれかを 指 定 し ます。<br />
S 符 号 付 き 余 り 算 術 演 算 2 8 または 2 16 です。 APSR の GE<br />
フラグが 設 定 されます。<br />
Q 符 号 付 きサチュ レー ト 算 術 演 算 です。<br />
SH 符 号 付 き 算 術 演 算 を 行 い、 結 果 を 半 分 に し ます。<br />
U 符 号 な し 余 り 算 術 演 算 2 8 または 2 16 です。 APSR の GE<br />
フラグが 設 定 されます。<br />
UQ 符 号 な し サチュ レー ト 算 術 演 算 です。<br />
UH 符 号 な し 算 術 演 算 を 行 い、 結 果 を 半 分 に し ます。<br />
次 のいずれかを 指 定 し ます。<br />
ADD8<br />
ADD16<br />
SUB8<br />
SUB16<br />
ASX<br />
SAX<br />
バ イ ト 単 位 の 加 算 を 行 います。<br />
ハーフ ワー ド 単 位 の 加 算 を 行 います。<br />
バ イ ト 単 位 の 減 算 を 行 います。<br />
ハーフ ワー ド 単 位 の 減 算 を 行 います。<br />
Rm のハーフ ワー ド を 交 換 し、 上 位 ハーフ ワー ド の 加 算<br />
と 下 位 ハーフ ワー ド の 減 算 を 行 います。<br />
Rm のハーフ ワー ド を 交 換 し、 上 位 ハーフ ワー ド の 減 算<br />
と 下 位 ハーフ ワー ド の 加 算 を 行 います。<br />
cond<br />
Rd<br />
Rm?Rn<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
デステ ィネーシ ョ ンレジスタを 指 定 します。 Rd に r15 を 使 用 しな<br />
いで 下 さい。<br />
オペラ ン ド を 保 持 する <strong>ARM</strong> レジスタを 指 定 します。 Rm または Rn<br />
に r15 を 使 用 しないで 下 さい。<br />
4-106 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
演 算<br />
これらの 命 令 は、 オペラ ン ド のバイ ト またはハーフ ワード に 対 し、 個 別 に 算<br />
術 演 算 を 実 行 し ます。 2 つか 4 つの 加 算 ま たは 減 算 、 あ る いは 1 つの 加 算 と 1<br />
つの 減 算 を 実 行 します。<br />
以 下 の よ う な さ ま ざ ま な 種 類 の 演 算 を 選 択 で き ます。<br />
• 2 8 または 2 16 の 符 号 付 き / 符 号 な し 余 り の 算 術 演 算 。 これによ り APSR の<br />
GE フ ラ グが 設 定 さ れます (「「 条 件 フ ラ グ」」 を 参 照 )。<br />
• 符 号 付 き 範 囲 –2 15 ≤ x ≤ 2 15 –1 または –2 7 ≤ x ≤ 2 7 –1 のいずれかに 対 する<br />
符 号 付 きサチュ レー ト 算 術 演 算 。 こ れ ら の 演 算 がサチ ュ レー ト する 場 合<br />
でも Q フラグへの 影 響 はありません。<br />
• 符 号 な し 範 囲 0 ≤ x ≤ 2 16 –1 または 0 ≤ x ≤ 2 8 –1 のいずれかに 対 する 符 号<br />
な し サチュ レー ト 算 術 演 算 。 これらの 演 算 がサチュレートする 場 合 でも<br />
Q フラグへの 影 響 はありません。<br />
• 符 号 付 き / 符 号 な し 算 術 演 算 。 結 果 は 二 分 さ れます。 これによってオー<br />
バーフ ローが 発 生 する こ と はあ り ません。<br />
条 件 フ ラ グ<br />
これらの 命 令 による N、 Z、 C、 V、 または Q フラグへの 影 響 はありません。<br />
こ れら の 命 令 に 接 頭 文 字 Q、 SH、 UQ および UH を 使 用 した 場 合 でも、 フラグへの<br />
影 響 はあ り ません。<br />
こ れら の 命 令 に 接 頭 文 字 S と U を 使 用 した 場 合 は、 APSR の GE フラグが 以 下<br />
のよ うに 設 定 されます。<br />
• バイ ト 単 位 の 演 算 では、 GE フラグは 32 ビッ トの SUB と ADD 命 令 におけ<br />
る C (キ ャ リ ー) フ ラ グ と 同 様 の 方 法 で 使 用 さ れます。<br />
GE[0]<br />
GE[1]<br />
GE[2]<br />
GE[3]<br />
結 果 のビ ッ ト [7:0] に 対 応 し ます。<br />
結 果 のビ ッ ト [15:8] に 対 応 し ます。<br />
結 果 のビ ッ ト [23:16] に 対 応 し ます。<br />
結 果 のビ ッ ト [31:24] に 対 応 し ます。<br />
• ハーフ ワー ド 単 位 の 演 算 では、 GE フ ラ グは 通 常 のワー ド 単 位 の -SUB-<br />
命 令 および SUB と ADD 命 令 におけ る C (キ ャ リ ー) フ ラ グ と 同 様 の 方 法<br />
で 使 用 されます。<br />
GE[1:0] 結 果 のビ ッ ト [15:0] に 対 応 し ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-107<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
GE[3:2]<br />
結 果 のビ ッ ト [31:16] に 対 応 し ます。<br />
これらのフラグを 使 用 して、 次 に 続 く SEL 命 令 を 制 御 で き ます (「SEL」 (ペー<br />
ジ 4-70) を 参 照 )。<br />
注<br />
ハーフ ワー ド 単 位 の 演 算 では、 GE[1:0] が 同 時 にセ ッ ト またはク リ ア され、<br />
GE[3:2] が 同 時 にセ ッ ト またはク リ ア されます。<br />
アーキテクチャ<br />
これらの <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6 以 降 で 使 用 で き ます。<br />
この 32 ビット Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。 ただ し、<br />
<strong>ARM</strong>v7-M プロファイルでは 使 用 できません。<br />
これらの 命 令 の 16 ビッ ト Thumb バージ ョ ンはあ り ません。<br />
サンプル<br />
SHADD8<br />
USAXNE<br />
r4, r3, r9<br />
r0, r0, r2<br />
誤 用 例<br />
QHADD r2, r9, r3 ; No such instruction, should be QHADD8 or QHADD16<br />
SAX r10, r8, r5 ; Must have a prefix.<br />
4-108 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.6.2 USAD8、 USADA8<br />
符 号 な し 絶 対 差 の 和 と 符 号 な し 絶 対 差 の 和 の 累 算 です。<br />
構 文<br />
USAD8{cond} {Rd}, Rn, Rm<br />
USADA8{cond} Rd, Rn, Rm, Ra<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond<br />
Rd<br />
Rn<br />
Rm<br />
Ra<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
デスティネーシ ョ ンレジスタを 指 定 します。<br />
第 1 オペラ ン ド を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
第 2 オペラ ン ド を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
累 算 オペ ラ ン ド を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
Rd、 Rn、 Rn、 または Ra に r15 を 使 用 しないで 下 さい。<br />
演 算<br />
USAD8 命 令 は、 Rn と Rm のそれぞれ 対 応 するバイ ト の 符 号 な し 値 に 基 づいて、 4<br />
つのバイ ト の 差 分 を 取 り ます。 この 命 令 は、 4 つの 差 分 の 絶 対 値 を 加 算 し、 そ<br />
の 結 果 を Rd にス ト アします。<br />
USADA8 命 令 は、 4 つの 差 分 の 絶 対 値 を Ra の 値 に 加 算 し、 その 結 果 を Rd に 保 存<br />
します。<br />
条 件 フ ラ グ<br />
こ れら の 命 令 に よ る フ ラ グへの 影 響 はあ り ません。<br />
アーキテクチャ<br />
これらの <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6 以 降 で 使 用 で き ます。<br />
この 32 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。 ただ し、<br />
<strong>ARM</strong>v7-M プ ロファイルでは 使 用 できません。<br />
これらの 命 令 の 16 ビッ ト Thumb バージ ョ ンはあ り ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-109<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
サンプル<br />
USAD8<br />
USADA8<br />
USADA8VS<br />
r2, r4, r6<br />
r0, r3, r5, r2<br />
r0, r4, r0, r1<br />
誤 用 例<br />
USADA8 r2, r4, r6 ; USADA8 requires four registers<br />
USADA16 r0, r4, r0, r1 ; no such instruction<br />
4-110 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.6.3 SSAT16、 USAT16<br />
並 列 ハーフ ワー ド サチュ レー ト 命 令 です。<br />
SSAT16 符 号 付 き の 値 を 符 号 付 き 範 囲 内 でサチュ レー ト し ます。<br />
USAT16 符 号 付 き の 値 を 符 号 な し 範 囲 内 でサチュ レー ト し ます。<br />
構 文<br />
op{cond} Rd, #sat, Rn<br />
各 パラ メ ータには 以 下 の 意 味 があ り ます。<br />
op<br />
cond<br />
Rd<br />
次 のいずれかを 指 定 し ます。<br />
SSAT16<br />
USAT16<br />
符 号 付 き サチュ レーシ ョ ン を 実 行 し ます。<br />
符 号 な し サチュ レーシ ョ ン を 実 行 し ます。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
デスティネーシ ョ ンレジスタを 指 定 します。<br />
sat サチュ レー ト させる ビ ッ ト 位 置 を 指 定 し ます。 SSAT16 の 場 合 は 1<br />
~ 16、 USAT16 の 場 合 は 0 ~ 15 の 値 と な り ます。<br />
Rn<br />
オペラ ン ド を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
Rd または Rn に r15 を 使 用 しないで 下 さい。<br />
演 算<br />
任 意 のビ ッ ト 位 置 に 対 し てハーフ ワー ド 単 位 の 符 号 付 き / 符 号 な し サチュ<br />
レーシ ョ ン を 実 行 し ます。<br />
SSAT16 命 令 は、 符 号 付 き 範 囲 –2 sat–1 ≤ x ≤ 2 sat–1 –1 で、 各 ハーフ ワー ド をサ<br />
チュレート します。<br />
USAT16 命 令 は、 符 号 な し 範 囲 0 ≤ x ≤ 2 sat –1 で、 各 ハーフ ワード をサチュ レー<br />
トします。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-111<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
条 件 フ ラ グ<br />
いずれかのハーフ ワー ド に 対 するサチュ レーシ ョ ンが 発 生 する と 、 これらの<br />
命 令 に よ って Q フラグが 設 定 されます。 Q フラグの 状 態 を 読 み 出 すには、 MRS<br />
命 令 を 使 用 します (「MRS」 (ページ 4-143) を 参 照 )。<br />
アーキテクチャ<br />
これらの <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6 以 降 で 使 用 で き ます。<br />
この 32 ビット Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。 ただ し、<br />
<strong>ARM</strong>v7-M プロファイルでは 使 用 できません。<br />
これらの 命 令 の 16 ビッ ト Thumb バージ ョ ンはあ り ません。<br />
サンプル<br />
SSAT16 r7, #12, r7<br />
USAT16 r0, #7, r5<br />
誤 用 例<br />
SSAT16 r1, #16, r2, LSL #4 ; shifts not permitted with halfword saturations<br />
4-112 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.7 パ ッ ク 命 令 と 展 開 命 令<br />
こ のセ ク シ ョ ンは 以 下 のサブセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「BFC、 BFI」 (ページ 4-114)<br />
ビ ッ ト フ ィ ール ド の ク リ ア 命 令 と 挿 入 命 令 です。<br />
• 「SBFX、 UBFX」 (ページ 4-116)<br />
符 号 付 き / 符 号 な し ビ ッ ト フ ィ ール ド の 抽 出 命 令 です。<br />
• 「SXT、 SXTA、 UXT、 UXTA」 (ページ 4-117)<br />
必 要 に 応 じ て 加 算 命 令 を 伴 う 、 符 号 拡 張 命 令 ま たはゼ ロ 拡 張 命 令 です。<br />
• 「PKHBT、 PKHTB」 (ページ 4-120)<br />
ハーフ ワー ド パ ッ ク 命 令 です。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-113<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.7.1 BFC、 BFI<br />
ビ ッ ト フ ィ ール ド の ク リ ア 命 令 と 挿 入 命 令 です。 レジスタ 内 の 一 連 のビッ ト<br />
をクリアするか、 または 1 つのレジス タから 別 のレジス タに 一 連 のビ ッ ト を<br />
挿 入 し ます。<br />
構 文<br />
BFC{cond} Rd, #lsb, #width<br />
BFI{cond} Rd, Rn, #lsb, #width<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond<br />
Rd<br />
Rn<br />
lsb<br />
width<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
デステ ィネーシ ョ ンレジスタを 指 定 します。 Rd に r15 は 指 定 でき<br />
ません。<br />
ソースレジスタを 指 定 します。 Rn に r15 は 指 定 でき ません。<br />
ク リ ア ま たはコ ピーする 最 下 位 ビ ッ ト を 指 定 し ます。<br />
ク リ ア ま たはコ ピーする ビ ッ ト 数 を 指 定 し ます。 width を 0 にはで<br />
きません。 また、 (width+lsb) は 32 未 満 にな る 必 要 があ り ます。<br />
BFC<br />
Rd の lsb から width ビッ ト 分 のビッ トがクリアされます。 Rd 内 の 他 のビ ッ ト は<br />
変 更 さ れません。<br />
BFI<br />
width 分 のビ ッ ト が Rd の lsb からク リアされ、Rn のビッ ト [0] から 始 まる width<br />
分 のビ ッ ト によ って 置 き 換 え られます。 Rd 内 の 他 のビ ッ ト は 変 更 されません。<br />
条 件 フ ラ グ<br />
こ れら の 命 令 に よ る フ ラ グへの 影 響 はあ り ません。<br />
アーキテクチャ<br />
これらの <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
4-114 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
これらの 32 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
これらの 命 令 の 16 ビッ ト Thumb バージ ョ ンはあ り ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-115<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.7.2 SBFX、 UBFX<br />
符 号 付 き / 符 号 な し ビ ッ ト フ ィ ール ド の 抽 出 命 令 です。 隣 接 する ビ ッ ト を あ る<br />
レジスタから 別 のレジスタの 最 下 位 ビッ トにコピーし、 32 ビ ッ ト に 符 号 拡 張<br />
またはゼロ 拡 張 します。<br />
構 文<br />
op{cond} Rd, Rn, #lsb, #width<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
cond<br />
Rd<br />
Rn<br />
lsb<br />
SBFX または UBFX を 指 定 し ます。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
デステ ィネーシ ョ ンレジスタを 指 定 します。<br />
ソースレジスタを 指 定 します。<br />
ビッ トフィールドの 最 下 位 ビッ トのビッ ト 番 号 を 0 ~ 31 の 範 囲<br />
内 で 指 定 し ます。<br />
width ビッ トフィールドの 幅 を 1 ~ (32–lsb) の 範 囲 内 で 指 定 し ます。<br />
Rd または Rn に r15 を 使 用 しないで 下 さい。<br />
条 件 フ ラ グ<br />
こ れら の 命 令 に よ る フ ラ グへの 影 響 はあ り ません。<br />
アーキテクチャ<br />
これらの <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
これらの 32 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
これらの 命 令 の 16 ビッ ト Thumb バージ ョ ンはあ り ません。<br />
4-116 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.7.3 SXT、 SXTA、 UXT、 UXTA<br />
符 号 拡 張 、 符 号 拡 張 と 加 算 、 ゼ ロ 拡 張 、 ゼ ロ 拡 張 と 加 算 。<br />
構 文<br />
SXT{cond}<br />
{Rd}, Rm {,rotation}<br />
SXTA{cond} {Rd}, Rn, Rm {,rotation}<br />
UXT{cond} {Rd}, Rm {,rotation}<br />
UXTA{cond} {Rd}, Rn, Rm {,rotation}<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
<br />
cond<br />
Rd<br />
Rn<br />
Rm<br />
rotation<br />
次 のいずれかを 指 定 し ます。<br />
B16 2 つの 8 ビット 値 を 2 つの 16 ビッ ト 値 に 拡 張 します。<br />
B<br />
H<br />
8 ビット 値 を 32 ビッ ト 値 に 拡 張 します。<br />
16 ビッ ト 値 を 32 ビッ ト 値 に 拡 張 します。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
デスティネーシ ョ ンレジスタを 指 定 します。<br />
加 算 する 数 を 保 持 する レ ジ ス タ を 指 定 し ます (SXTA と UXTA の 場<br />
合 のみ)。<br />
拡 張 する 値 を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
次 のいずれかを 指 定 し ます。<br />
ROR #8 Rm の 値 が 右 に 8 ビッ トロテートされます。<br />
ROR #16<br />
ROR #24<br />
Rm の 値 が 右 に 16 ビットロテートされます。<br />
Rm の 値 が 右 に 24 ビットロテートされます。<br />
rotation を 省 略 し た 場 合 、 ロ テー ト は 実 行 さ れません。<br />
Rd、 Rn、 または Rm に r15 を 使 用 しないで 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-117<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
演 算<br />
こ れら の 命 令 は 以 下 の 処 理 を 行 います。<br />
1. Rm の 値 を 右 に 0 ビッ ト、8 ビッ ト、16 ビッ ト、または 24 ビッ トロテート<br />
します。<br />
2. 取 得 し た 値 に 対 し て 以 下 のいずれかの 処 理 を 行 います。<br />
• ビット [7:0] を 抽 出 し、 32 ビ ッ ト に 符 号 拡 張 ま たはゼ ロ 拡 張 し ま<br />
す。 命 令 で 拡 張 と 加 算 を 行 う 場 合 は、 Rn の 値 を 加 算 します。<br />
• ビット [15:0] を 抽 出 し、 32 ビ ッ ト に 符 号 拡 張 ま たはゼ ロ 拡 張 し ま<br />
す。 命 令 で 拡 張 と 加 算 を 行 う 場 合 は、 Rn の 値 を 加 算 します。<br />
• ビット [23:16] とビット [7:0] を 抽 出 し、 これらのビ ッ ト を 16 ビッ<br />
ト に 符 号 拡 張 ま たはゼ ロ 拡 張 し ます。 命 令 で 拡 張 と 加 算 を 行 う 場 合<br />
は、 これらのビ ッ ト をそれぞれ Rn のビッ ト [31:16] とビット [15:0]<br />
に 加 算 し て、 結 果 のビ ッ ト [31:16] とビット [15:0] を 作 成 し ます。<br />
条 件 フ ラ グ<br />
こ れら の 命 令 に よ る フ ラ グへの 影 響 はあ り ません。<br />
16 ビット 命 令<br />
Thumb コード 内 で 使 用 する と きは、 次 の 形 式 だけが 16 ビット 命 令 になりま<br />
す。 ま た、 Thumb-2 以 前 の Thumb コード 内 で 使 用 できるのは、 これらの 命 令<br />
だけです。<br />
SXTB Rd, Rm<br />
SXTH Rd, Rm<br />
UXTB Rd, Rm<br />
UXTH Rd, Rm<br />
Rd および Rm は 共 に Lo レジスタである 必 要 があり ます。<br />
Rd および Rm は 共 に Lo レジスタである 必 要 があり ます。<br />
Rd および Rm は 共 に Lo レジスタである 必 要 があり ます。<br />
Rd および Rm は 共 に Lo レジスタである 必 要 があり ます。<br />
アーキテクチャ<br />
これらの <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6 以 降 で 使 用 で き ます。<br />
SXTA と UXTA Thumb 命 令 は <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。 ただ し、 <strong>ARM</strong>v7-M<br />
プロファイルでは 使 用 できません。<br />
SXT と UXT の 32 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
4-118 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
SXT と UXT の 16 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6 以 降 で 使 用 で き ます。<br />
サンプル<br />
SXTH<br />
r3, r9, r4<br />
UXTAB16EQ r0, r0, r4, ROR #16<br />
誤 用 例<br />
SXTH r9, r3, r2, ROR #12 ; rotation must be by 0, 8, 16, or 24.<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-119<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.7.4 PKHBT、 PKHTB<br />
ハーフ ワー ド パ ッ ク 命 令 です。<br />
あるレジスタに 保 持 されているハーフワード と 別 のレジスタに 保 持 されてい<br />
るハーフワードを 結 合 します。 オペラ ン ド の 1 つは、 ハーフ ワー ド を 抽 出 する<br />
前 にシフ ト でき ます。<br />
構 文<br />
PKHBT{cond} {Rd}, Rn, Rm{, LSL #leftshift}<br />
PKHTB{cond} {Rd}, Rn, Rm{, ASR #rightshift}<br />
各 パ ラ メ ータには 以 下 の 意 味 があ り ます。<br />
PKHBT<br />
PKHTB<br />
cond<br />
Rd<br />
Rn<br />
Rm<br />
leftshift<br />
rightshift<br />
Rn のビッ ト [15:0] とシフト された Rm の 値 のビ ッ ト [31:16] を 結 合<br />
します。<br />
Rn のビッ ト [31:16] とシフト された Rm の 値 のビ ッ ト [15:0] を 結 合<br />
します。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
デステ ィネーシ ョ ンレジスタを 指 定 します。<br />
第 1 オペラ ン ド を 保 持 する レジス タ を 指 定 し ます。<br />
第 1 オペラ ン ド を 保 持 する レジス タ を 指 定 し ます。<br />
0 ~ 31 の 範 囲 内 にあ る 値 を 指 定 し ます。<br />
1 ~ 32 の 範 囲 内 にあ る 値 を 指 定 し ます。<br />
Rd、 Rn、 または Rm に r15 を 使 用 しないで 下 さい。<br />
条 件 フ ラ グ<br />
こ れら の 命 令 に よ る フ ラ グへの 影 響 はあ り ません。<br />
4-120 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
アーキテクチャ<br />
これらの <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6 以 降 で 使 用 で き ます。<br />
この 32 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。 ただ し、<br />
<strong>ARM</strong>v7-M プロファイルでは 使 用 できません。<br />
これらの 命 令 の 16 ビッ ト Thumb バージ ョ ンはあ り ません。<br />
サンプル<br />
PKHBT r0, r3, r5 ; combine the bottom halfword of r3 with<br />
; the top halfword of r5<br />
PKHBT r0, r3, r5, LSL #16 ; combine the bottom halfword of r3 with<br />
; the bottom halfword of r5<br />
PKHTB r0, r3, r5, ASR #16 ; combine the top halfword of r3 with<br />
; the top halfword of r5<br />
また、 異 なるシフ ト 値 を 使 用 して、 第 2 オペラ ン ド を 位 取 り する こ と もでき<br />
ます。<br />
誤 用 例<br />
PKHBTEQ r4, r5, r1, ASR #8 ; ASR not permitted with PKHBT<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-121<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.8 分 岐 命 令 と 制 御 命 令<br />
こ のセ ク シ ョ ンは 以 下 のサブセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「B、 BL、 BX、 BLX、 BXJ」 (ページ 4-123)<br />
分 岐 、 リ ン ク 付 き 分 岐 、 分 岐 と 命 令 セ ッ ト の 切 り 替 え、 リ ン ク 付 き 分 岐<br />
と 命 令 セッ トの 切 り 替 え、 および 分 岐 と 命 令 セッ トの Jazelle への 変 更 を<br />
行 う 命 令 です。<br />
• 「IT」 (ページ 4-127)<br />
If-Then 命 令 です。 IT 命 令 は、 後 続 する 最 大 4 個 の 命 令 を 条 件 付 き 命 令 に<br />
し ます。 その 際 に、 条 件 はすべて 同 じ にする こ と も、 一 部 の 命 令 に 対 し<br />
ては 条 件 を 1 つ 設 定 し、 残 り の 命 令 に 対 し ては 逆 条 件 を 設 定 する こ と も<br />
可 能 です。 IT を 使 用 でき るのは、 Thumb-2 だけです。<br />
• 「CBZ、 CBNZ」 (ページ 4-130)<br />
ゼ ロ と の 比 較 と 分 岐 を 行 う 命 令 です。 これらの 命 令 は、 Thumb-2 でのみ<br />
使 用 で き ます。<br />
• 「TBB、 TBH」 (ページ 4-131)<br />
テーブル 分 岐 バイ ト と テーブル 分 岐 ハーフ ワード です。 これらの 命 令<br />
は、 Thumb-2 でのみ 使 用 で き ます。<br />
4-122 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.8.1 B、 BL、 BX、 BLX、 BXJ<br />
分 岐 、 リ ン ク 付 き 分 岐 、 分 岐 と 命 令 セ ッ ト の 切 り 替 え、 リ ン ク 付 き 分 岐 と 命<br />
令 セ ッ ト の 切 り 替 え、 分 岐 と Jazelle 状 態 への 変 更 を 行 う 命 令 です。<br />
構 文<br />
op1{cond}{.W} label<br />
op2{cond} Rm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op1<br />
op2<br />
cond<br />
次 のいずれかを 指 定 し ます。<br />
B 分 岐 命 令 です。<br />
BL リ ン ク 付 き 分 岐 命 令 です。<br />
BLX リンク 付 き 分 岐 と 命 令 セットの 切 り 替 えを 行 う 命 令 で<br />
す。<br />
次 のいずれかを 指 定 し ます。<br />
BX 分 岐 と 命 令 セ ッ ト の 切 り 替 え を 行 う 命 令 です。<br />
BLX リンク 付 き 分 岐 と 命 令 セットの 切 り 替 えを 行 う 命 令 で<br />
す。<br />
BXJ 分 岐 と Jazelle 実 行 状 態 への 変 更 を 行 う 命 令 です。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。 cond は、 こ れ ら の 命 令 のすべての 形 式 で 使 用 で き る わけ<br />
ではあ り ません。 「 命 令 の 使 用 可 否 と 分 岐 の 範 囲 」 (ページ<br />
4-124) を 参 照 して 下 さい。<br />
.W Thumb-2 の 32 ビッ ト B 命 令 を 使 用 させるために 命 令 の 幅 の 指 定<br />
子 を 指 定 し ます ( 省 略 可 )。 詳 細 については、 「Thumb-2 の B」<br />
(ページ 4-125) を 参 照 して 下 さい。<br />
label<br />
Rm<br />
プログラム 相 対 式 を 指 定 します。 詳 細 については、 「レジスタ 相<br />
対 式 と プ ロ グ ラ ム 相 対 式 」 (ページ 3-39) を 参 照 して 下 さい。<br />
分 岐 先 ア ド レ ス を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-123<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
演 算<br />
こ れら のすべての 命 令 は、 label への 分 岐 または Rm に 保 持 されている ア ド レ ス<br />
への 分 岐 を 発 生 させます。 さ ら に、 以 下 の 処 理 を 行 います。<br />
• BL と BLX 命 令 は、 次 の 命 令 のア ド レ ス を lr (r14 :リンクレジスタ)にコ<br />
ピーします。<br />
• BX と BLX 命 令 は、 プ ロ セ ッ サ 状 態 を <strong>ARM</strong> から Thumb に 変 更 し た り 、<br />
Thumb から <strong>ARM</strong> に 変 更 し た り でき ます。<br />
BLX label を 使 用 する と 、 状 態 が 必 ず 変 更 さ れます。<br />
BX Rm と BLX Rm を 使 用 する と Rm のビッ ト [0] からターゲッ トの 状 態 を 得 る<br />
ことができます。<br />
— Rm のビッ ト [0] が 0 の 場 合 、 プ ロ セ ッ サは <strong>ARM</strong> 状 態 に 切 り 替 わ る<br />
か、 <strong>ARM</strong> 状 態 が 維 持 さ れます。<br />
— Rm のビッ ト [0] が 1 の 場 合 、プ ロ セ ッ サは Thumb 状 態 に 切 り 替 わ る<br />
か、 Thumb 状 態 が 維 持 さ れます。<br />
• BXJ 命 令 はプ ロ セ ッ サの 状 態 を Jazelle に 変 更 し ます。<br />
命 令 の 使 用 可 否 と 分 岐 の 範 囲<br />
表 4-7 は、 <strong>ARM</strong> 状 態 と Thumb 状 態 で 使 用 で き る 命 令 を 示 し ています。 この 表<br />
に 記 載 されていない 命 令 は 使 用 でき ません。 括 弧 内 は、 命 令 を 使 用 で き る<br />
アーキテ クチャの 最 初 のバージ ョ ンを 示 しています。<br />
表 4-7 分 岐 命 令 の 使 用 可 否 と 分 岐 の 範 囲<br />
命 令 <strong>ARM</strong> 32 ビットの Thumb 32 ビットの Thumb<br />
B label ±32MB (すべ<br />
て)<br />
±2KB<br />
(すべて<br />
の T)<br />
±16MB a (すべての T2)<br />
B{cond} label ±32MB (すべ<br />
て)<br />
-252 ~ +258 (すべて<br />
の T)<br />
±1MB a (すべての T2)<br />
BL label ±32MB (すべ<br />
て)<br />
±4MB b<br />
(すべて<br />
の T)<br />
±16MB (すべての T2)<br />
BL{cond} label ±32MB (すべ<br />
て)<br />
- - -<br />
BX Rm 使 用 可 能 (4T、 5) 使 用 可 能 (すべて<br />
の T)<br />
16 ビ ッ ト を 使 用 (すべての T2)<br />
4-124 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
BX{cond} Rm 使 用 可 能 (4T、 5) - - -<br />
BLX label ±32MB (5) ±4MB b (5T) ±16MB (<strong>ARM</strong>v7-M を<br />
除 くすべての<br />
T2)<br />
BLX Rm 使 用 可 能 (5) 使 用 可 能 (5T) 16 ビ ッ ト を 使 用 (すべての T2)<br />
BLX{cond} Rm 使 用 可 能 (5) - - -<br />
BXJ Rm 使 用 可 能 (5J、 6) - 使 用 可 能 (<strong>ARM</strong>v7-M を<br />
除 くすべての<br />
T2)<br />
BXJ{cond} Rm 使 用 可 能 (5J、 6) - - -<br />
a. この 32 ビ ッ ト 命 令 を 使 用 する よ う アセンブ ラ に 指 定 する 場 合 は .W を 使 用 し ます。<br />
b. こ れは 命 令 対 です。<br />
表 4-7 分 岐 命 令 の 使 用 可 否 と 分 岐 の 範 囲 ( 続 き)<br />
命 令 <strong>ARM</strong> 32 ビットの Thumb 32 ビットの Thumb<br />
分 岐 の 範 囲 の 拡 張<br />
マシンレベルの B 命 令 と BL 命 令 では、 現 在 の 命 令 のア ド レ スから 分 岐 でき る<br />
範 囲 が 制 限 さ れています。 ただし、 label が 範 囲 外 の 場 合 で も こ れら の 命 令 を<br />
使 用 で き ます。 ほとんどの 場 合 、 リンカが label を 配 置 する 場 所 は 分 か り ませ<br />
ん。 必 要 な 場 合 には、 リ ンカはコー ド を 追 加 し て よ り 長 い 分 岐 を 可 能 に し ま<br />
す。 『リンカユーザガイド』 の 第 3 章 基 本 リ ン カ 機 能 の 使 用 を 参 照 して 下 さ<br />
い。 追 加 さ れた コー ド は veneer (ベニア) と 呼 ばれます。<br />
Thumb-2 の B<br />
.W 幅 指 定 子 を 使 用 し て、 B で Thumb-2 コードの 32 ビ ッ ト 命 令 を 生 成 する こ と<br />
ができ ます。<br />
B.W は、 16 ビ ッ ト 命 令 を 使 用 し てターゲ ッ ト に 到 達 でき る 場 合 でも、 常 に 32<br />
ビ ッ ト 命 令 を 生 成 し ます。<br />
参 考 と し て、 32 ビット Thumb 命 令 が 使 用 で き る ターゲ ッ ト で 失 敗 が 発 生 し て<br />
も、.W 指 定 な し の B が 常 に 16 ビッ ト Thumb コードの 命 令 を 生 成 します。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-125<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
Thumb-2EE での BX、 BLX、 および BXJ<br />
これらの 命 令 は、 Thumb-2EE コー ド 内 で 分 岐 と し て 使 用 で き ますが、 状 態 の<br />
変 更 には 使 用 で き ません。 こ の 命 令 は op{cond} label 形 式 では Thumb-2EE で 使<br />
用 でき ません。 レジス タ 形 式 では Rm のビッ ト [0] が 1 になっている 必 要 があ<br />
り、 ターゲッ トアドレスでの 実 行 は ThumbEE 状 態 で 継 続 し ます。<br />
条 件 フ ラ グ<br />
こ れら の 命 令 に よ る フ ラ グへの 影 響 はあ り ません。<br />
アーキテクチャ<br />
各 アーキテ ク チャ での こ れら の 命 令 の 使 用 可 否 の 詳 細 については、 「 命 令 の 使<br />
用 可 否 と 分 岐 の 範 囲 」 (ページ 4-124) を 参 照 して 下 さい。<br />
サンプル<br />
B loopA<br />
BLE ng+8<br />
BL subC<br />
BLLT rtX<br />
BEQ {pc}+4 ; #0x8004<br />
4-126 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.8.2 IT<br />
IT (If-Then) 命 令 は、 後 続 する 最 大 4 個 の 命 令 (IT ブロッ ク) を 条 件 付 き 命<br />
令 にし ます。 条 件 はすべて 同 じ にする こ と も、 論 理 的 に 逆 の 条 件 を 混 在 さ せ<br />
ることも 可 能 です。<br />
IT ブ ロ ッ ク 内 の 命 令 ( 分 岐 も 含 む) は、 構 文 の {cond} の 部 分 の 条 件 も 指 定 す<br />
る 必 要 があ り ます。<br />
コード 内 に IT 命 令 を 記 述 する 必 要 はあ り ません。 後 続 の 命 令 に 指 定 さ れた 条<br />
件 に 従 って、 アセンブラによ り 自 動 的 に 生 成 されるからです。 ただし、 IT 命<br />
令 を 記 述 する と、 アセンブラは IT 命 令 に 指 定 さ れた 条 件 を、 後 続 の 命 令 に 指<br />
定 された 条 件 と 突 き 合 わせて 検 証 します。<br />
IT 命 令 を 記 述 する と 、 コー ド 設 計 におけ る 条 件 付 き 命 令 の 配 置 および 条 件 の<br />
選 択 を 確 実 に 検 討 する こ と がで き る よ う にな り ます。<br />
<strong>ARM</strong> コードにアセンブルする と きにも、 アセンブラは 同 じチェ ッ クを 行 いま<br />
すが、 IT 命 令 は 生 成 し ません。<br />
構 文<br />
IT{x{y{z}}} {cond}<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
x<br />
IT ブロックで 2 番 目 の 命 令 の 条 件 ス イ ッ チを 指 定 し ます。<br />
y<br />
z<br />
cond<br />
IT ブロックで 3 番 目 の 命 令 の 条 件 ス イ ッ チを 指 定 し ます。<br />
IT ブロックで 4 番 目 の 命 令 の 条 件 ス イ ッ チを 指 定 し ます。<br />
IT ブロ ッ クで 最 初 の 命 令 の 条 件 を 指 定 します。<br />
IT ブロッ クで 2 ~ 4 番 目 の 命 令 の 条 件 ス イ ッ チは、 以 下 のいずれかにする こ<br />
とができます。<br />
T<br />
Then。 条 件 cond を 命 令 に 適 用 し ます。<br />
E<br />
Else。 cond の 逆 条 件 を 命 令 に 適 用 し ます。<br />
使 用 法<br />
16 ビ ッ ト 命 令 は 通 常 は 条 件 コー ド フ ラ グに 影 響 を 及 ぼ し ますが、 IT ブロッ ク<br />
内 で 使 用 さ れる と き には 影 響 を 及 ぼ し ません。 ただ し、 CMP、 CMN、 および TST<br />
は 例 外 です。<br />
IT ブロッ ク 内 の BKPT 命 令 は、 条 件 が 偽 の 場 合 で も 必 ず 実 行 さ れます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-127<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
注<br />
AL 条 件 を 使 用 する こ と に よ って、 無 条 件 命 令 に 対 し て も IT ブロッ クを 使 用 す<br />
ることができます。<br />
条 件 分 岐 の 分 岐 の 範 囲 は、 IT ブロ ッ ク 内 の 方 が IT ブロッ ク 外 よ り 長 くなり ま<br />
す。<br />
制 約 条 件<br />
IT ブ ロ ッ ク 内 では、 以 下 の 命 令 を 使 用 で き ません。<br />
• IT<br />
• CBZ および CBNZ<br />
• TBB および TBH<br />
• CPS、 CPSID、 および CPSIE<br />
• SETEND<br />
IT ブ ロ ッ ク 使 用 時 のその 他 の 制 約 条 件 は、 以 下 の と お り です。<br />
• 分 岐 ま たは pc を 変 更 する 命 令 が、 ブロ ッ ク 内 で 最 後 の 命 令 であ る 場 合 、<br />
使 用 で き る のは IT ブロック 内 に 限 られます。<br />
• 例 外 ハン ド ラ か ら 復 帰 する 場 合 でない 限 り 、 IT ブロッ ク 内 ではどの 命 令<br />
にも 分 岐 できません。<br />
• IT ブ ロ ッ ク 内 でアセンブ ラデ ィ レ ク テ ィ ブを 使 用 する こ と はで き ませ<br />
ん。<br />
条 件 フ ラ グ<br />
この 命 令 によ る フ ラ グへの 影 響 はあ り ません。<br />
例 外<br />
IT 命 令 と それに 対 応 する IT ブロッ クの 間 、 または IT ブロッ クの 内 部 で 例 外<br />
が 発 生 する 場 合 があ り ます。 例 外 が 発 生 する と 、 適 切 な 例 外 ハン ド ラ が 開 始<br />
さ れ、 適 切 な 復 帰 情 報 が lr と SPSR に 格 納 されます。<br />
例 外 か ら の 復 帰 に 使 用 する 目 的 で 設 計 さ れた 命 令 は、 例 外 か ら 復 帰 する ため<br />
に 通 常 どお り 使 用 可 能 であ り 、 IT ブロ ッ ク の 実 行 は 正 常 に 再 開 されます。 こ<br />
れは、 プ ロ グ ラ ムカ ウ ン タ を 変 更 する 命 令 が、 IT ブ ロ ッ ク 内 の 命 令 に 分 岐 す<br />
る 唯 一 の 方 法 です。<br />
4-128 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
アーキテクチャ<br />
この 16 ビッ ト Thumb 命 令 は <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
例<br />
ITTE NE ; IT can be omitted<br />
ANDNE r0,r0,r1 ; 16-bit AND, not ANDS<br />
ADDSNE r2,r2,#1 ; 32-bit ADDS (16-bit ADDS does not set flags in IT block)<br />
MOVEQ r2,r3 ; 16-bit MOV<br />
ITT AL ; emit 2 non-flag setting 16-bit instructions<br />
ADDAL r0,r0,r1 ; 16-bit ADD, not ADDS<br />
SUBAL r2,r2,#1 ; 16-bit SUB, not SUB<br />
ADD r0,r0,r1 ; expands into 32-bit ADD<br />
IT NE<br />
ADD r0,r0,r1 ; syntax error: no condition code used in IT block<br />
ITT EQ<br />
MOVEQ r0,r1<br />
BEQ dloop<br />
注 釈<br />
IT ブ ロ ッ ク 内 の 予 測 不 可 能 な 命 令<br />
B、 BL、 CPS IT ブ ロ ッ ク 内 で 予 測 不 可 能 な 命 令 を 使 用 する と 、 こ れ<br />
ら の 命 令 の 結 果 が 信 頼 で き ないため、 警 告 が 表 示 さ れます。 ま<br />
た、 BX、 CBZ、 RFE など、 プログラムカウンタを 変 更 する 命 令 につ<br />
いても 警 告 が 表 示 されます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-129<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.8.3 CBZ、 CBNZ<br />
ゼロとの 比 較 と 分 岐 を 行 う 命 令 です (ゼロまたはゼロでない 場 合 に 分 岐 します)。<br />
構 文<br />
CBZ Rn, label<br />
CBNZ Rn, label<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
Rn オペラ ン ド を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
label 分 岐 先 を 指 定 し ます。<br />
使 用 法<br />
CBZ 命 令 ま たは CBNZ 命 令 を 使 用 して、 条 件 コード フ ラグの 変 更 を 防 止 し、 命<br />
令 数 を 削 減 する こ とができます。<br />
条 件 コー ド フ ラ グが 変 更 さ れない 点 を 除 き、CBZ Rn, label は 以 下 のコマン ド と<br />
同 じ 意 味 です。<br />
CMP Rn, #0<br />
BEQ label<br />
条 件 コー ド フ ラ グが 変 更 さ れない 点 を 除 き、 CBNZ Rn, label は 以 下 のコマン ド<br />
と 同 じ 意 味 です。<br />
CMP Rn, #0<br />
BNE label<br />
制 約 条 件<br />
分 岐 先 は、 命 令 の 後 に 4 ~ 130 バ イ ト 以 内 に 指 定 する 必 要 があ り ます。<br />
これらの 命 令 は IT ブロ ッ ク 内 では 使 用 でき ません。<br />
条 件 フ ラ グ<br />
こ れら の 命 令 に よ る フ ラ グへの 影 響 はあ り ません。<br />
アーキテクチャ<br />
これらの 16 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
これらの 命 令 の <strong>ARM</strong> バージ ョ ンおよび 32 ビッ ト Thumb バージ ョ ンはあ り ません。<br />
4-130 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.8.4 TBB、 TBH<br />
テーブル 分 岐 (バイ ト ) と テーブル 分 岐 (ハーフワード)。<br />
構 文<br />
TBB [Rn, Rm]<br />
TBH [Rn, Rm, LSL #1]<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
Rn<br />
Rm<br />
ベース レ ジ ス タ を 指 定 し ます。 このレジスタには、 分 岐 の 長 さ<br />
テーブルのア ド レ スが 保 持 されます。 Rn に r13 は 指 定 でき ませ<br />
ん。<br />
Rn に r15 を 指 定 し てい る 場 合 、 使 用 さ れる 値 は 「 命 令 のア ド レ ス<br />
+ 4」 となり ます。<br />
インデクスレジスタを 指 定 します。 テーブル 内 の 場 所 を 指 定 する<br />
イ ンデ ク ス を 保 持 し ます。<br />
Rm に r15 と r13 は 指 定 でき ません。<br />
演 算<br />
これらの 命 令 によ り、 シングルバイ トオフセッ ト (TBB) またはハーフワード<br />
オフセッ ト (TBH) のテーブルを 使 用 した PC 相 対 の 順 方 向 の 分 岐 が 発 生 し ま<br />
す。 Rn はテーブルへのポインタを 提 供 し、 Rm はテーブル 内 のインデク スを 提<br />
供 します。 分 岐 の 長 さ は、 テーブルか ら 返 さ れたバ イ ト (TBB) またはハーフ<br />
ワード (TBH) の 値 の 2 倍 にな り ます。<br />
注 釈<br />
Thumb-2EE では、 ベース レジス タの 値 が 0 の 場 合 、 HandlerBase - 4 にある<br />
NullCheck ハン ド ラへの 分 岐 が 実 行 さ れます。<br />
アーキテクチャ<br />
これらの 32 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
これらの 命 令 の <strong>ARM</strong> バージ ョ ンおよび 16 ビッ ト Thumb バージ ョ ンはあ り ま<br />
せん。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-131<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.9 コ プ ロセ ッ サ 命 令<br />
こ のセ ク シ ョ ンでは、 ベ ク タ 浮 動 小 数 点 ( 第 5 章 NEON と VFP プログラ ミ ン<br />
グ を 参 照 ) およびワ イヤレス MMX テクノロジの 命 令 ( 第 6 章 ワイヤレス<br />
MMX テクノロジの 命 令 を 参 照 ) について 説 明 し ません。 XScale 固 有 の 命 令 に<br />
ついてはこ の 章 の 後 半 で 説 明 し ます (「その 他 の 命 令 」 (ページ 4-140) を 参<br />
照 )。<br />
こ のセ ク シ ョ ンは 以 下 のサブセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「CDP、 CDP2」 (ページ 4-133)<br />
コ プ ロ セ ッ サデータ 演 算 です。<br />
• 「MCR、 MCR2、 MCRR、 MCRR2」 (ページ 4-134)<br />
コプロセッサ 命 令 を 使 用 した <strong>ARM</strong> レジスタからコプロセッサへの 移 動<br />
命 令 です。<br />
• 「MRC、 MRC2、 MRRC、 MRRC2」 (ページ 4-136)<br />
コプロセッサ 命 令 を 使 用 したコプロセッサから <strong>ARM</strong> レジスタへの 移 動<br />
命 令 です。<br />
• 「LDC、 LDC2、 STC、 STC2」 (ページ 4-138)<br />
メ モ リ と コプロセ ッ サ 間 のデータ 転 送 命 令 です。<br />
注<br />
コプロセッサ 命 令 は、 コプロセッサが 存 在 しないときやイネーブルにされて<br />
ない と き に 実 行 さ れる と 、 未 定 義 命 令 と い う 例 外 が 発 生 し ます。<br />
4-132 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.9.1 CDP、 CDP2<br />
コプロセッサデータ 演 算 です。<br />
構 文<br />
op{cond} coproc, #opcode1, CRd, CRn, CRm{, #opcode2}<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
cond<br />
coproc<br />
opcode1<br />
opcode2<br />
CRd?CRn?CRm<br />
CDP または CDP2 を 指 定 し ます。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ<br />
2-20) を 参 照 )。 <strong>ARM</strong> コードでは、 cond を CDP2 では 使 用 で<br />
きません。<br />
命 令 が 実 行 される コプロセ ッサの 名 前 を 指 定 し ます。 標 準<br />
名 は pn で、 n は 0 ~ 15 の 整 数 です。<br />
4 ビットコプロセッサ 固 有 のオペコードを 指 定 します。<br />
オプシ ョ ン と しての 3 ビッ トコプロセッサ 固 有 のオペコー<br />
ドを 指 定 します。<br />
コプロセッサレジスタを 指 定 します。<br />
使 用 法<br />
こ れら の 命 令 の 使 用 方 法 はコ プ ロ セ ッ サに よ って 異 な り ます。 詳 細 について<br />
は、 コプロ セ ッ サのマニ ュ アルを 参 照 し て 下 さ い。<br />
アーキテクチャ<br />
<strong>ARM</strong> 命 令 CDP は、 <strong>ARM</strong> アーキテ ク チ ャ のすべてのバージ ョ ンで 使 用 で き ま<br />
す。<br />
<strong>ARM</strong> 命 令 CDP2 は、 <strong>ARM</strong>v5 以 降 で 使 用 で き ます。<br />
これらの 32 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
これらの 命 令 の 16 ビッ ト Thumb バージ ョ ンはあ り ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-133<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.9.2 MCR、 MCR2、 MCRR、 MCRR2<br />
<strong>ARM</strong> レ ジ ス タ か ら コ プ ロ セ ッ サへの 移 動 命 令 です。 コプロセッサによって<br />
は、 さ ま ざ ま な 演 算 を 追 加 で 指 定 で き る 場 合 があ り ます。<br />
構 文<br />
op1{cond} coproc, #opcode1, Rt, CRn, CRm{, #opcode2}<br />
op2{cond} coproc, #opcode3, Rt, Rt2, CRm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op1<br />
op2<br />
cond<br />
coproc<br />
opcode1<br />
opcode2<br />
opcode3<br />
Rt?Rt2<br />
CRn?CRm<br />
MCR または MCR2 を 指 定 し ます。<br />
MCRR または MCRR2 を 指 定 し ます。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。 <strong>ARM</strong> コードでは、 cond を MCR2 または MCRR2 では 使 用 でき<br />
ません。<br />
命 令 が 実 行 される コプロセ ッサの 名 前 を 指 定 し ます。 標 準 名 は pn<br />
で、 n は 0 ~ 15 の 整 数 です。<br />
3 ビッ トコプロセッサ 固 有 のオペコードを 指 定 します。<br />
オプシ ョ ン と しての 3 ビットコプロセッサ 固 有 のオペコードを 指<br />
定 します。<br />
4 ビッ トコプロセッサ 固 有 のオペコードを 指 定 します。<br />
<strong>ARM</strong> ソースレジスタを 指 定 します。MCRR と MCRR2 に r15 は 指 定 で<br />
きません。<br />
コプロセッサレジスタを 指 定 します。<br />
使 用 法<br />
こ れら の 命 令 の 使 用 方 法 はコ プ ロ セ ッ サに よ って 異 な り ます。 詳 細 について<br />
は、 コプロ セ ッ サのマニ ュ アルを 参 照 し て 下 さ い。<br />
4-134 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
アーキテクチャ<br />
<strong>ARM</strong> 命 令 MCR は、 <strong>ARM</strong> アーキテ ク チ ャ のすべてのバージ ョ ンで 使 用 で き ま<br />
す。<br />
<strong>ARM</strong> 命 令 MCR2 は、 <strong>ARM</strong>v5 以 降 で 使 用 で き ます。<br />
<strong>ARM</strong> 命 令 MCRR は、 <strong>ARM</strong>v6 以 降 、 および <strong>ARM</strong>v5 の E バリアントで 使 用 でき<br />
ます。<br />
<strong>ARM</strong> 命 令 MCRR2 は、 <strong>ARM</strong>v6 以 降 で 使 用 で き ます。<br />
これらの 32 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
これらの 命 令 の 16 ビッ ト Thumb バージ ョ ンはあ り ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-135<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.9.3 MRC、 MRC2、 MRRC、 MRRC2<br />
コプロセッサから <strong>ARM</strong> レ ジ ス タへの 移 動 命 令 です。<br />
コプロセッサによっては、 さまざまな 演 算 を 追 加 で 指 定 できる 場 合 があり ま<br />
す。<br />
構 文<br />
op1{cond} coproc, #opcode1, Rt, CRn, CRm{, #opcode2}<br />
op2{cond} coproc, #opcode3, Rt, Rt2, CRm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op1<br />
op2<br />
cond<br />
coproc<br />
opcode1<br />
opcode2<br />
opcode3<br />
MRC または MRC2 を 指 定 し ます。<br />
MRRC または MRRC2 を 指 定 し ます。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。 <strong>ARM</strong> コードでは、 cond を MRC2 または MRRC2 では 使 用 でき<br />
ません。<br />
命 令 が 実 行 される コプロセ ッサの 名 前 を 指 定 し ます。 標 準 名 は pn<br />
で、 n は 0 ~ 15 の 整 数 です。<br />
3 ビッ トコプロセッサ 固 有 のオペコードを 指 定 します。<br />
オプシ ョ ン と しての 3 ビットコプロセッサ 固 有 のオペコードを 指<br />
定 します。<br />
4 ビッ トコプロセッサ 固 有 のオペコードを 指 定 します。<br />
Rt?Rt2 <strong>ARM</strong> ソースレジスタを 指 定 します。 r15 は 使 用 し ないで 下 さ い。<br />
MRC と MRC2 では Rt に APSR_nzcv も 使 用 できます。<br />
CRn?CRm<br />
コプロセッサレジスタを 指 定 します。<br />
使 用 法<br />
こ れら の 命 令 の 使 用 方 法 はコ プ ロ セ ッ サに よ って 異 な り ます。 詳 細 について<br />
は、 コプロ セ ッ サのマニ ュ アルを 参 照 し て 下 さ い。<br />
4-136 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
アーキテクチャ<br />
<strong>ARM</strong> 命 令 MRC は、 <strong>ARM</strong> アーキテ ク チ ャ のすべてのバージ ョ ンで 使 用 で き ま<br />
す。<br />
<strong>ARM</strong> 命 令 MRC2 は、 <strong>ARM</strong>v5 以 降 で 使 用 で き ます。<br />
<strong>ARM</strong> 命 令 MRRC は、 <strong>ARM</strong>v6 以 降 、 および <strong>ARM</strong>v5 の E バリアントで 使 用 でき<br />
ます。<br />
<strong>ARM</strong> 命 令 MRRC2 は、 <strong>ARM</strong>v6 以 降 で 使 用 で き ます。<br />
これらの 32 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
これらの 命 令 の 16 ビッ ト Thumb バージ ョ ンはあ り ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-137<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.9.4 LDC、 LDC2、 STC、 STC2<br />
メ モ リ と コ プ ロ セ ッ サ 間 のデータ 転 送 命 令 です。<br />
構 文<br />
op{L}{cond} coproc, CRd, [Rn]<br />
op{L}{cond} coproc, CRd, [Rn, #{-}offset]{!}<br />
op{L}{cond} coproc, CRd, [Rn], #{-}offset<br />
op{L}{cond} coproc, CRd, label<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
cond<br />
L<br />
coproc<br />
CRd<br />
Rn<br />
LDC、 LDC2、 STC、 STC2 のいずれかを 指 定 し ます。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
<strong>ARM</strong> コードでは、 cond を LDC2 または STC2 では 使 用 でき ません。<br />
長 い 転 送 を 指 定 する オプシ ョ ンの 接 尾 文 字 を 指 定 し ます。<br />
命 令 が 実 行 される コプロセ ッサの 名 前 を 指 定 し ます。 標 準 名 は pn<br />
で、 n は 0 ~ 15 の 整 数 です。<br />
ロー ド ま たはス ト アに 使 用 する コ プ ロ セ ッ サレ ジ ス タ を 指 定 し<br />
ます。<br />
メモリアドレスのベースとなるレジスタを 指 定 します。 r15 が 指<br />
定 さ れてい る 場 合 、 使 用 さ れる 値 は 「 現 在 の 命 令 のア ド レ ス +<br />
8」 となり ます。<br />
- 任 意 に 指 定 で き る マ イ ナス 符 号 です。 - が 指 定 さ れてい る 場 合 、<br />
オフセッ ト が Rn から 減 算 されます。 指 定 されていない 場 合 は、<br />
オフセッ ト が Rn に 加 算 されます。<br />
offset<br />
0 ~ 1020 の 範 囲 で 4 の 倍 数 と な る 式 を 指 定 し ます。<br />
! 任 意 に 指 定 で き る 接 尾 文 字 です。 ! を 指 定 する と 、 オフセ ッ ト を<br />
含 むア ド レ スが Rn にライ トバックされます。<br />
label<br />
ワー ド 境 界 で 整 列 する プ ロ グ ラ ム 相 対 式 を 指 定 し ます。 詳 細 につ<br />
いては、 「レ ジ ス タ 相 対 式 と プ ロ グ ラ ム 相 対 式 」 (ページ 3-39)<br />
を 参 照 して 下 さい。<br />
4-138 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
label は 現 在 の 命 令 か ら 1020 バイ ト 以 内 に 配 置 する 必 要 があり ま<br />
す。<br />
使 用 法<br />
こ れら の 命 令 の 使 用 方 法 はコ プ ロ セ ッ サに よ って 異 な り ます。 詳 細 について<br />
は、 コプロ セ ッ サのマニ ュ アルを 参 照 し て 下 さ い。<br />
Thumb-2EE では、 ベース レジス タの 値 が 0 の 場 合 、 HandlerBase - 4 にある<br />
NullCheck ハン ド ラへの 分 岐 が 実 行 さ れます。<br />
アーキテクチャ<br />
LDC と STC は、 <strong>ARM</strong> アーキテ ク チ ャ のすべてのバージ ョ ンで 使 用 で き ます。<br />
LDC2 と STC2 は <strong>ARM</strong>v5 以 降 で 使 用 で き ます。<br />
これらの 32 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
これらの 命 令 の 16 ビッ ト Thumb バージ ョ ンはあ り ません。<br />
注 釈<br />
STC と STC2 命 令 でのプ ロ グ ラ ム 相 対 ア ド レ スの 使 用 は、 非 推 奨 です。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-139<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.10 その 他 の 命 令<br />
こ のセ ク シ ョ ンは 以 下 のサブセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「BKPT」 (ページ 4-141)<br />
ブレークポイン ト 命 令 です。<br />
• 「SVC」 (ページ 4-142)<br />
スーパーバイザコール ( 以 前 の SWI) です。<br />
• 「MRS」 (ページ 4-143)<br />
CPSR または SPSR の 内 容 の 汎 用 レ ジ ス タへの 移 動 命 令 です。<br />
• 「MSR」 (ページ 4-145)<br />
CPSR または SPSR の 指 定 フ ィ ール ドへの、 即 定 値 または 汎 用 レジス タ<br />
の 内 容 のロード 命 令 です。<br />
• 「CPS」 (ページ 4-148)<br />
プ ロ セ ッ サ 状 態 を 変 更 する 命 令 です。<br />
• 「SMC」 (ページ 4-150)<br />
セキ ュ アモニ ターコール ( 以 前 の SMI) です。<br />
• 「SETEND」 (ページ 4-151)<br />
CPSR 内 のエンデ ィ アンビ ッ ト を 設 定 し ます。<br />
• 「NOP、 SEV、 WFE、 WFI、 YIELD」 (ページ 4-152)<br />
演 算 な し、 イベン ト の 設 定 、 イベン ト 待 機 、 割 り 込 み 待 機 、 明 け 渡 し を<br />
行 う ヒント 命 令 です。<br />
• 「DBG、 DMB、 DSB、 ISB」 (ページ 4-154)<br />
デバ ッ グ、 データ メ モ リ バ リ ア、 データ 同 期 バ リ ア、 および 命 令 同 期 バ<br />
リアの 各 ヒント 命 令 です。<br />
• 「MAR、 MRA」 (ページ 4-157)<br />
2 本 の 汎 用 レジス タ と 40 ビ ッ ト 内 部 アキュムレータの 間 で 転 送 を 実 行 し<br />
ます (XScale コプロセッサ 0 の 命 令 です)。<br />
4-140 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.10.1 BKPT<br />
ブレークポイン ト 命 令 です。<br />
構 文<br />
BKPT #immed<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
immed<br />
以 下 の 範 囲 の 整 数 にな る 式 を 指 定 し ます。<br />
• <strong>ARM</strong> 命 令 の 場 合 は 0 ~ 65535 (16 ビッ ト 値 )<br />
• 16 ビッ ト Thumb 命 令 の 場 合 は 0 ~ 255 (8 ビッ ト 値 )<br />
使 用 法<br />
BKPT 命 令 に よ って、 プ ロ セ ッ サはデバ ッ グ 状 態 に 入 り ます。 デバ ッ グツール<br />
は、 こ の 動 作 を 使 用 し て、 特 定 のア ド レ スにあ る 命 令 に 到 達 し た 時 点 でシ ス<br />
テム 状 態 を 調 査 する こ とができます。<br />
<strong>ARM</strong> 状 態 と Thumb 状 態 のど ち ら の 場 合 も、 immed は <strong>ARM</strong> ハー ド ウ ェ アに<br />
よって 無 視 されます。 ただし、 デバッガはこの 値 を 使 用 して、 ブレークポイ<br />
ントに 関 する 情 報 をストアできます。<br />
アーキテクチャ<br />
この <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v5 以 降 で 使 用 で き ます。<br />
この 16 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v5 以 降 の T バ リ ア ン ト で 使 用 で き ます。<br />
こ の 命 令 の 32 ビット Thumb バージ ョ ンはあ り ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-141<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.10.2 SVC<br />
スーパーバイザコールです。<br />
構 文<br />
SVC{cond} #immed<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond<br />
immed<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
以 下 の 範 囲 の 整 数 にな る 式 を 指 定 し ます。<br />
• <strong>ARM</strong> 命 令 の 場 合 は 0 ~ 2 24 –1 (24 ビッ ト 値 )<br />
• 16 ビット Thumb 命 令 の 場 合 は 0 ~ 255 (8 ビッ ト 値 )<br />
使 用 法<br />
SVC 命 令 に よ って 例 外 が 発 生 し ます。 つま り 、 プロ セ ッ サモー ド がスーパーバ<br />
イ ザモー ド に 変 更 さ れ、 CPSR がスーパーバイザモードの SPSR に 保 存 され、<br />
実 行 は SVC ベ ク タへ 分 岐 さ れます (『デベロ ッ パガ イ ド 』 の 第 6 章 プロセッ<br />
サ 例 外 処 理 を 参 照 )。<br />
immed はプロセ ッサによ って 無 視 されます。 ただし、 この 値 は、 例 外 ハン ド ラ<br />
で 取 得 し て、 要 求 さ れてい る サービ ス を 特 定 する こ と がで き ます。<br />
注<br />
<strong>ARM</strong> アセンブ リ 言 語 を 開 発 する 一 環 と し て、SWI 命 令 の 名 前 が SVC に 変 更 され<br />
ました。 RVCT の 本 リ リ ースでは、 SWI 命 令 は、 以 前 は SWI だった (formerly<br />
SWI) という コ メン ト 付 きで SVC に 逆 アセンブルされます。<br />
条 件 フ ラ グ<br />
この 命 令 によ る フ ラ グへの 影 響 はあ り ません。<br />
アーキテクチャ<br />
この <strong>ARM</strong> 命 令 は、 <strong>ARM</strong> アーキテ ク チャのすべてのバージ ョ ンで 使 用 でき ます。<br />
16 ビット Thumb 命 令 は、 <strong>ARM</strong> アーキテクチャのすべての T バリアントで 使<br />
用 でき ます。<br />
4-142 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.10.3 MRS<br />
PSR の 内 容 の 汎 用 レ ジ ス タへの 移 動 命 令 です。<br />
構 文<br />
MRS{cond} Rd, psr<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond<br />
Rd<br />
psr<br />
Mpsr<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
デスティネーシ ョ ンレジスタを 指 定 します。 Rd に r15 は 指 定 でき<br />
ません。<br />
次 のいずれかを 指 定 し ます。<br />
APSR 任 意 のプ ロ セ ッ サ、 任 意 のモー ド で 使 用 し ます。<br />
CPSR <strong>ARM</strong>v7-M と <strong>ARM</strong>v6-M 以 外 の 任 意 のプ ロ セ ッ サで、 代<br />
わりに 同 義 の APSR を 使 用 し、 デバッグ 状 態 で 使 用 し<br />
ます。<br />
SPSR <strong>ARM</strong>v7-M と <strong>ARM</strong>v6-M 以 外 の 任 意 のプ ロ セ ッ サ、 特 権<br />
モード のみで 使 用 し ます。<br />
Mpsr <strong>ARM</strong>v7-M と <strong>ARM</strong>v6-M プ ロ セ ッ サのみで 使 用 し ます。<br />
次 のいずれかを 指 定 でき ます。 IPSR、 EPSR、 IEPSR、 IAPSR、 EAPSR、<br />
MSP、 PSP、 XPSR、 PRIMASK、 BASEPRI、 BASEPRI_MAX、 FAULTMASK、 CONTROL、<br />
または です。<br />
使 用 法<br />
MRS は MSR と 組 み 合 わせ、 PSR を 更 新 する ための 読 み 出 し- 修 正 - 書 き 込 みシー<br />
ケンスで 使 用 するこ とによ り、 プロセッサモードの 変 更 や Q フラグのク リア<br />
などを 行 う こ とができます。<br />
プロセススワップコードでは、 関 連 する PSR の 内 容 を 含 め、 ス ワ ッ プアウ ト<br />
さ れてい る プ ロ セ スのプ ロ グ ラ マのモデルの 状 態 を 保 存 する 必 要 があ り ます。<br />
同 様 に、 ス ワ ッ プ イ ン さ れてい る プ ロ セスの 状 態 も 復 元 する 必 要 があ り ます。<br />
これらの 操 作 には、MRS/store および load/MSR 命 令 シーケ ン ス を 使 用 し ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-143<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
SPSR<br />
プロセッサがユーザモードやシステムモードの 場 合 は、 SPSR へア クセス しな<br />
いで 下 さい。 これはユーザ 自 身 が 注 意 する 必 要 があ り ます。 アセンブラは、<br />
コードがどのプロセッサモードで 実 行 されるかについての 情 報 を 持 たないた<br />
め、 警 告 メ ッ セージを 生 成 で き ません。<br />
ユーザモー ド またはシステムモード の 場 合 に SPSR にアクセスし よ う と した<br />
場 合 の 結 果 は 予 測 不 可 能 です。<br />
CPSR<br />
プ ロ セ ッ サがデバ ッ グ 状 態 でデバ ッ グモー ド を 完 全 停 止 し てい る と き にのみ、<br />
CPSR 実 行 状 態 ビ ッ ト を 読 み 出 すこ と がで き ます。 それ 以 外 の 場 合 、 CPSR の<br />
実 行 状 態 ビ ッ ト はゼ ロ と し て 読 み 出 さ れます。<br />
条 件 フラグはどのプロセッサのどのモードでも 読 み 取 れます。 この 場 合 は、<br />
CPSR ではな く APSR を 使 用 して 下 さい。<br />
条 件 フ ラ グ<br />
この 命 令 によ る フ ラ グへの 影 響 はあ り ません。<br />
アーキテクチャ<br />
この <strong>ARM</strong> 命 令 は、 <strong>ARM</strong> アーキテ ク チ ャ のすべてのバージ ョ ンで 使 用 で き ま<br />
す。<br />
これらの 32 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
この 命 令 の 16 ビット Thumb バージ ョ ンはあ り ません。<br />
4-144 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.10.4 MSR<br />
即 定 値 ま たは 汎 用 レ ジ ス タ の 内 容 をプログラム 状 態 レジスタ (PSR) の 指 定<br />
されたフィールドにロード します。<br />
構 文 (<strong>ARM</strong>v7-M と <strong>ARM</strong>v6-M を 除 く )<br />
MSR{cond} APSR_flags, #constant<br />
MSR{cond} APSR_flags, Rm<br />
MSR{cond} psr_fields, #constant<br />
MSR{cond} psr_fields, Rm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
??? 移 動 する APSR フ ラ グ ( 複 数 可 ) を 指 定 し ます。 flags には 以 下<br />
の 1 つ 以 上 を 指 定 で き ます。<br />
nzcvq<br />
g<br />
ALU フラグフィールドマスク、 PSR[31:27] (ユーザ<br />
モード)<br />
SIMD GE フラグフィールドマスク、 PSR[19:16] (ユー<br />
ザモード)<br />
constant<br />
Rm<br />
psr<br />
fields<br />
数 値 定 数 を 求 め る 式 を 指 定 し ます。 この 定 数 は、32 ビッ トのワー<br />
ド 内 でビッ ト を 偶 数 ロテート して 得 られる 8 ビッ トパターンに 対<br />
応 している 必 要 があり ます。 Thumb では 使 用 でき ません。<br />
ソースレジスタを 指 定 します。<br />
次 のいずれかを 指 定 し ます。<br />
CPSR デバ ッ グ 状 態 で 使 用 、 代 わ り に 同 義 の APSR を 使 用 し<br />
ます。<br />
SPSR 任 意 のプ ロ セ ッ サ、 特 権 モー ド のみで 使 用 し ます。<br />
移 動 する SPSR または CPSR フ ィ ール ド ( 複 数 可 ) を 指 定 し ま<br />
す。 fields には 次 のものを 指 定 でき ます。<br />
c 制 御 フ ィ ール ド マス ク バイ ト 、 PSR[7:0] ( 特 権 モー ド )<br />
x 拡 張 フ ィ ール ド マス ク バイ ト 、 PSR[15:8] ( 特 権 モー<br />
ド)<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-145<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
s<br />
f<br />
ステータスフィールドマスクバイ ト、 PSR[23:16] ( 特<br />
権 モード)<br />
フラグフィールドマスクバイト、 PSR[31:24] ( 特 権<br />
モード)<br />
構 文 (<strong>ARM</strong>v7-M と <strong>ARM</strong>v6-M のみ)<br />
MSR{cond} psr, Rm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond<br />
Rm<br />
psr<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
ソースレジスタを 指 定 します。<br />
次 のいずれかを 指 定 でき ます。 APSR、 IPSR、 EPSR、 IEPSR、 IAPSR、<br />
EAPSR、 XPSR、 MSP、 PSP、 PRIMASK、 BASEPRI、 BASEPRI_MAX、 FAULTMASK、<br />
または CONTROL です。<br />
使 用 法<br />
詳 細 については、 「MRS」 (ページ 4-143) を 参 照 して 下 さい。<br />
ユーザモー ド では、 以 下 のよ う にな り ます。<br />
• APSR は 条 件 フ ラ グ、 Q、 または GE ビットにアクセスするために 使 用 し<br />
ます。<br />
• CPSR の 未 割 り 当 て ビ ッ ト 、 特 権 付 き ビ ッ ト 、 ま たは 実 行 状 態 ビ ッ ト へ<br />
の 書 き 込 みが 無 視 さ れます。 そのため、 ユーザモードのプログラムが 特<br />
権 モード に 変 更 される こ と はあ り ません。<br />
ユーザモー ド またはシステムモード の 場 合 に SPSR にアクセスした 場 合 の 結<br />
果 は 予 測 不 可 能 です。<br />
条 件 フ ラ グ<br />
この 命 令 は、APSR_nzcvq または CPSR_f フィールドが 指 定 されている 場 合 にフラ<br />
グ を 明 示 的 に 更 新 し ます。<br />
4-146 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
アーキテクチャ<br />
この <strong>ARM</strong> 命 令 は、 <strong>ARM</strong> アーキテ ク チ ャ のすべてのバージ ョ ンで 使 用 で き ま<br />
す。<br />
この 32 ビッ ト Thumb 命 令 は <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
こ の 命 令 の 16 ビット Thumb バージ ョ ンはあ り ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-147<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.10.5 CPS<br />
CPS (プ ロ セ ッ サ 状 態 の 変 更 命 令 ) は、 他 の CPSR ビ ッ ト を 変 更 する こ と な<br />
く、 CPSR のモード、 A、 I、 および F のビッ ト の 1 つ 以 上 を 変 更 し ます。<br />
CPS は、 特 権 モード のみで 使 用 でき、 ユーザモード では 作 用 し ません。<br />
CPS は、 条 件 付 き にする こ と はで き ないため、 IT ブロッ クでは 使 用 できませ<br />
ん。<br />
構 文<br />
CPSeffect iflags{, #mode}<br />
CPS #mode<br />
各 パ ラ メ ータには 以 下 の 意 味 があ り ます。<br />
effect<br />
iflags<br />
mode<br />
次 のいずれかを 指 定 し ます。<br />
IE 割 り 込 みま たはアボー ト を イ ネーブルに し ます。<br />
ID 割 り 込 みま たはアボー ト をデ ィ セーブルに し ます。<br />
以 下 の 項 目 のシーケ ン ス を 指 定 し ます。<br />
a 不 正 確 なアボー ト を イ ネーブルま たはデ ィ セーブルし<br />
ます。<br />
i IRQ 割 り 込 みをイネーブルまたはディセーブルします。<br />
f<br />
FIQ 割 り 込 みをイネーブルまたはディセーブルします。<br />
変 更 先 のモー ド の 番 号 を 指 定 し ます。<br />
条 件 フ ラ グ<br />
この 命 令 によ る フ ラ グへの 影 響 はあ り ません。<br />
16 ビット 命 令<br />
これらの 命 令 は、 Thumb-2 以 前 の Thumb コード 内 では 次 の 形 式 で 使 用 できま<br />
す。 ま た、 Thumb-2 コード 内 で 使 用 する と きは 16 ビット 命 令 になります。<br />
CPSIE iflags<br />
CPSID iflags<br />
16 ビット Thumb 命 令 ではモー ド の 変 更 を 指 定 で き ません。<br />
4-148 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
アーキテクチャ<br />
この <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6 以 降 で 使 用 で き ます。<br />
この 32 ビッ ト Thumb 命 令 は <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
この 16 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6 以 降 の T バ リ ア ン ト で 使 用 で き ます。<br />
サンプル<br />
CPSIE if ; enable interrupts and fast interrupts<br />
CPSID A ; disable imprecise aborts<br />
CPSID ai, #17 ; disable imprecise aborts and interrupts, and enter FIQ mode<br />
CPS #16 ; enter User mode<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-149<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.10.6 SMC<br />
セキュアモニターコールです。<br />
詳 細 については、 『<strong>ARM</strong> Architecture Reference Manual Security Extensions<br />
Supplement』 を 参 照 して 下 さい。<br />
構 文<br />
SMC{cond} #immed_4<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond<br />
immed_4<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
4 ビッ トの 即 値 を 指 定 します。 この 値 は、<strong>ARM</strong> プロセッサでは 無<br />
視 されますが、 SMC 例 外 ハン ド ラ で 使 用 し て、 要 求 さ れてい る<br />
サービ ス を 特 定 する こ と がで き ます。<br />
注<br />
<strong>ARM</strong> アセンブ リ 言 語 開 発 の 一 環 と し て、SMI 命 令 の 名 前 が SMC に 変 更 されま し<br />
た。 RVCT の 本 リ リ ースでは、 SMI 命 令 は、 以 前 は SMI だった (formerly SMI)<br />
というコメント 付 きで SMC に 逆 アセンブルされます。<br />
アーキテクチャ<br />
この <strong>ARM</strong> 命 令 は <strong>ARM</strong>v6 以 降 の 実 装 で 使 用 で き ます。 ただ し、 Security<br />
Extensions が 必 要 です。<br />
この 32 ビット Thumb 命 令 は <strong>ARM</strong>v6T2 以 降 の 実 装 で 使 用 可 能 です。 ただ し、<br />
Security Extensions が 必 要 です。<br />
この 命 令 の 16 ビット Thumb バージ ョ ンはあ り ません。<br />
4-150 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.10.7 SETEND<br />
CPSR 内 のエンデ ィ アンビ ッ ト を、 他 のビ ッ ト に 影 響 を 与 え る こ と な く 設 定<br />
します。<br />
SETEND は、 条 件 付 き にする こ と はで き ないため、 IT ブ ロ ッ ク では 使 用 で き ま<br />
せん。<br />
構 文<br />
SETEND specifier<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
specifier<br />
次 のいずれかを 指 定 し ます。<br />
BE ビ ッグエンディ アン 形 式<br />
LE リ ト ルエンディ アン 形 式<br />
使 用 法<br />
SETEND を 使 用 する と 、 異 な る エンデ ィ アン 形 式 のデータ にア ク セスで き ます。<br />
例 えば、 リ ト ルエンディ アン 形 式 のアプ リ ケーシ ョ ンから、 ビ ッ グエンディ<br />
ア ン 形 式 で DMA フォーマッ ト された 複 数 のデータフィールドにアクセスで<br />
きます。<br />
アーキテクチャ<br />
この <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6 以 降 で 使 用 で き ます。<br />
この 16 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v7-M プロファイルを 除 く <strong>ARM</strong>v6 以 降 の<br />
T バリアントで 使 用 できます。<br />
こ の 命 令 の 32 ビット Thumb バージ ョ ンはあ り ません。<br />
例<br />
SETEND BE<br />
; Set the CPSR E bit for big-endian accesses<br />
LDR r0, [r2, #header]<br />
LDR r1, [r2, #CRC32]<br />
SETEND le<br />
; Set the CPSR E bit for little-endian accesses for the<br />
; rest of the application<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-151<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.10.8 NOP、 SEV、 WFE、 WFI、 YIELD<br />
操 作 な し、 イベン ト の 設 定 、 イベン ト 待 機 、 割 り 込 み 待 機 、 および 明 け 渡 し<br />
を 行 う ヒ ン ト 命 令 です。<br />
構 文<br />
NOP{cond}<br />
SEV{cond}<br />
WFE{cond}<br />
WFI{cond}<br />
YIELD{cond}<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond 任 意 に 指 定 で き る 条 件 コー ド です (「 条 件 実 行 」 (ページ 2-20)<br />
を 参 照 )。<br />
使 用 法<br />
これらはヒン ト 命 令 です。 これら の 命 令 は 任 意 に 実 装 する こ と がで き ます。 い<br />
ずれの 命 令 も 実 装 されていない 場 合 は、 NOP として 動 作 します。<br />
NOP<br />
NOP 何 も 行 いません。 NOP がターゲッ ト アーキテクチャで 特 定 の 命 令 と して 実<br />
装 さ れていない 場 合 、 アセンブ ラ は、 擬 似 命 令 と し て 扱 い、 MOV r0, r0<br />
(<strong>ARM</strong>) や MOV r8, r8 (Thumb) など、 何 も 行 わない 別 の 命 令 を 生 成 します。<br />
NOP は、 必 ずし も 時 間 のかかる NOP ではあ り ません。 プロセッサによ り、 この<br />
命 令 は、 実 行 ス テージに 到 達 する 前 にパ イ プ ラ イ ンか ら 削 除 さ れる 場 合 があ<br />
ります。<br />
例 えば、 NOP をパデ ィ ングに 使 用 する こ と で、 次 に 続 く 命 令 を 64 ビッ ト 境 界<br />
に 配 置 する こ と がで き ます。<br />
SEV<br />
SEV によ り、 マルチプロセッサシステム 内 のすべてのコアに 対 してイベン ト を<br />
発 生 さ せます。 SEV を 実 装 する 場 合 は、 WFE も 実 装 する 必 要 があ り ます。<br />
4-152 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
WFE<br />
イベン ト レジスタが 設 定 されていない 場 合 、WFE は、 以 下 のいずれかのイベン<br />
ト が 発 生 する まで 実 行 を 保 留 し ます。<br />
• IRQ 割 り 込 み (CPSR の I ビットでマスクされている 場 合 を 除 く)<br />
• FIQ 割 り 込 み (CPSR の F ビ ッ ト でマス ク されている 場 合 を 除 く)<br />
• 不 正 確 なデータ アボー ト (CPSR の A ビットでマスクされている 場 合 を<br />
除 く)<br />
• デバ ッ グエン ト リ 要 求 (デバ ッ グが イ ネーブルの 場 合 )<br />
• 別 のプロセ ッ サが SEV 命 令 を 使 用 し て 発 生 し た イベン ト<br />
イベン ト レ ジ ス タ が 設 定 さ れてい る 場 合 、 WFE は、 そのレジス タ を ク リ ア し て<br />
すぐに 戻 り ます。<br />
WFE を 実 装 する 場 合 は、 SEV も 実 装 する 必 要 があり ます。<br />
WFI<br />
WFI は、 以 下 のいずれかの イベン ト が 発 生 する まで 実 行 を 保 留 し ます。<br />
• IRQ 割 り 込 み (CPSR の I ビ ッ ト の 設 定 と は 無 関 係 )<br />
• FIQ 割 り 込 み (CPSR の F ビ ッ ト の 設 定 と は 無 関 係 )<br />
• 不 正 確 なデータ アボー ト (CPSR の A ビットでマスクされている 場 合 を<br />
除 く)<br />
• デバ ッ グエン ト リ 要 求 (デバ ッ グがイ ネーブルされているかど う かは 無<br />
関 係 )<br />
YIELD<br />
YIELD は、 現 在 のスレッドが、 スワップアウトできるタスク (スピンロックな<br />
ど) を 実 行 している こ と をハード ウェアに 示 します。 ハー ド ウ ェ アは、 こ の<br />
ヒントを 使 用 して、マルチスレッドシステムでスレッドを 中 断 および 再 開 で<br />
きます。<br />
アーキテクチャ<br />
これらの <strong>ARM</strong> 命 令 は、 <strong>ARM</strong>v6K 以 降 で 使 用 で き ます。<br />
これらの 32 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
これらの 16 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
NOP はすべての <strong>ARM</strong> および Thumb アーキテ ク チャ で 疑 似 命 令 と し て 使 用 で き<br />
ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-153<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.10.9 DBG、 DMB、 DSB、 ISB<br />
デバ ッ グ、 データ メ モ リ バ リ ア、 データ 同 期 バ リ ア、 および 命 令 同 期 バ リ ア<br />
です。<br />
構 文<br />
DBG{cond} {#option}<br />
DMB{cond} {#option}<br />
DSB{cond} {#option}<br />
ISB{cond} {#option}<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond<br />
option<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
ヒ ン ト の 演 算 に 任 意 に 指 定 で き る 制 限 です。<br />
使 用 法<br />
これらはヒン ト 命 令 です。 これら の 命 令 は 任 意 に 実 装 する こ と がで き ます。 い<br />
ずれの 命 令 も 実 装 されていない 場 合 は、 NOP として 動 作 します。<br />
DBG<br />
デバ ッ グ ヒ ン ト は、 デバ ッ グシ ス テムおよび 関 連 する シ ス テムに ヒ ン ト を 提<br />
供 します。 こ の 命 令 がどの よ う に 使 用 さ れてい る かについては、 各 シ ス テム<br />
のマニュアルを 参 照 して 下 さい。<br />
DMB<br />
データ メ モ リ バ リ アは メ モ リ バ リ ア と し て 機 能 し ます。 これによ り、DMB 命 令<br />
よ り 前 にプ ロ グ ラ ム 順 で 発 生 する 明 示 的 なすべての メ モ リ ア ク セ スは、 DMB 命<br />
令 よ り 後 にプログ ラ ム 順 で 出 て く る 明 示 的 なデータア クセス よ り も 先 に 観 察<br />
されます。 これは、 プ ロ セ ッ サで 実 行 さ れてい る 他 の 命 令 の 順 序 に 影 響 する<br />
ことはありません。<br />
option に 使 用 で き る 値 は 以 下 の と お り です。<br />
SY<br />
システム 全 体 の DMB 演 算 。 これはデフォルト 値 なので、 省 略 で<br />
きます。<br />
ST ス ト アの 完 了 のみを 待 機 する DMB 演 算 。<br />
4-154 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
ISH 内 部 共 有 可 能 ド メ イ ンのみを 対 象 と し た DMB 演 算 。<br />
ISHST<br />
ス ト アの 完 了 のみを 待 機 し、 内 部 共 有 可 能 ド メ イ ン を 対 象 と し<br />
た DMB 演 算 。<br />
NSH 統 合 ポ イ ン ト のみを 対 象 と し た DMB 演 算 。<br />
NSHST<br />
ス ト アの 完 了 のみを 待 機 し、 統 合 ポ イ ン ト のみを 対 象 と し た<br />
DMB 演 算 。<br />
OSH 外 部 共 有 可 能 ド メ イ ンのみを 対 象 と し た DMB 演 算 。<br />
OSHST<br />
ス ト アの 完 了 のみを 待 機 し、 外 部 共 有 可 能 ド メ イ ン を 対 象 と し<br />
た DMB 演 算 。<br />
DSB<br />
データ 同 期 バ リ アは、 特 殊 な メ モ リ バ リ ア と し て 機 能 し ます。 この 命 令 が 完<br />
了 する まで、 こ の 命 令 よ り 後 にあ る プ ロ グ ラ ム 順 の 命 令 は 実 行 さ れません。<br />
こ の 命 令 は 以 下 の 場 合 に 完 了 し ます。<br />
• この 命 令 が 完 了 する 前 のすべての 明 示 的 な メ モ リ ア ク セス<br />
• こ の 命 令 が 完 了 する 前 のキ ャ ッ シ ュ、 分 岐 予 測 子 、 および TLB メンテ<br />
ナン スのすべての 処 理<br />
option に 使 用 でき る 値 は 以 下 の とお り です。<br />
SY<br />
システム 全 体 の DSB 演 算 。 これはデフォルト 値 なので、 省 略 で<br />
きます。<br />
ST ス ト アの 完 了 のみを 待 機 する DSB 演 算 。<br />
ISH 内 部 共 有 可 能 ド メ イ ンのみを 対 象 と し た DSB 演 算 。<br />
ISHST<br />
ス ト アの 完 了 のみを 待 機 し、 内 部 共 有 可 能 ド メ イ ン を 対 象 と し<br />
た DSB 演 算 。<br />
NSH 統 合 ポ イ ン ト のみを 対 象 と し た DSB 演 算 。<br />
NSHST<br />
ス ト アの 完 了 のみを 待 機 し、 統 合 ポ イ ン ト のみを 対 象 と し た<br />
DSB 演 算 。<br />
OSH 外 部 共 有 可 能 ド メ イ ンのみを 対 象 と し た DSB 演 算 。<br />
OSHST<br />
ス ト アの 完 了 のみを 待 機 し、 外 部 共 有 可 能 ド メ イ ン を 対 象 と し<br />
た DSB 演 算 。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-155<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
ISB<br />
命 令 同 期 バ リ アはプ ロ セ ッ サのパイ プ ラ イ ン を フ ラ ッ シ ュする ため、 ISB に 続<br />
くすべての 命 令 は、 ISB 命 令 が 完 了 し た 後 、 キ ャ ッ シ ュ ま たは メ モ リ か ら<br />
フェッチされます。 これによ り、ISB 命 令 よ り 前 に 実 行 さ れた コ ンテキ ス ト 変<br />
更 処 理 (ASID の 変 更 など)、 完 了 し た TLB メ ンテナン ス 処 理 、 分 岐 予 測 子 メ<br />
ンテナン ス 処 理 、 および CP15 レジスタへのすべての 変 更 は、ISB よ り 後 に<br />
フェッチされた 命 令 で 認 識 されます。<br />
また、ISB 命 令 に よ り 、 こ の 命 令 よ り 後 にプ ロ グ ラ ム 順 で 出 て く るすべての 分<br />
岐 は、 必 ず ISB 命 令 よ り 後 で 認 識 さ れる コ ンテキ ス ト と 共 に 分 岐 予 測 ロ ジ ッ<br />
クに 書 き 込 まれます。 こ れは、 命 令 ス ト リ ーム を 正 し く 実 行 する ために 必 要<br />
なことです。<br />
option に 使 用 で き る 値 は 以 下 の と お り です。<br />
SY<br />
システム 全 体 の ISB 演 算 。 これはデフォルト 値 なので、 省 略 でき<br />
ます。<br />
エイリアス<br />
DMB と DSB でサポー ト されている option の 代 替 値 は 以 下 の とお り ですが、<br />
使 用 は 非 推 奨 です。<br />
• SH は ISH のエイ リ アスです。<br />
• SHST は ISHST のエイ リ アスです。<br />
• UN は NSH のエイ リ アスです。<br />
• UNST は NSHST のエイ リ アスです。<br />
アーキテクチャ<br />
これらの <strong>ARM</strong> および 32 ビッ ト Thumb 命 令 は、 <strong>ARM</strong>v7 で 使 用 でき ます。<br />
これらの 命 令 の 16 ビッ ト Thumb バージ ョ ンはあ り ません。<br />
4-156 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.10.10 MAR、 MRA<br />
2 本 の 汎 用 レジス タ と 40 ビ ッ ト 内 部 アキュムレータの 間 で 転 送 を 実 行 します。<br />
構 文<br />
MAR{cond} Acc, RdLo, RdHi<br />
MRA{cond} RdLo, RdHi, Acc<br />
各 パラ メ ータには 以 下 の 意 味 があ り ます。<br />
cond<br />
Acc<br />
RdLo?RdHi<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
内 部 アキ ュ ム レータ を 指 定 し ます。 標 準 名 は accx で、 x は 0 ~ n<br />
の 整 数 です。 n の 値 はプロセ ッ サによ って 異 な り ます。 現 在 のプ<br />
ロセッサでは 0 が 使 用 されています。<br />
汎 用 レ ジ ス タ を 指 定 し ます。 RdLo と RdHi を pc にする こ と はでき<br />
ません。 また、 MRA では 異 なったレジス タでなければな り ません。<br />
使 用 法<br />
MAR 命 令 は、RdLo の 内 容 を Acc のビッ ト [31:0] にコピーし、RdHi の 最 下 位 バ イ ト<br />
を Acc のビッ ト [39:32] にコピーします。<br />
MRA 命 令 は 以 下 を 実 行 し ます。<br />
• Acc のビッ ト [31:0] を RdLo にコピーします。<br />
• Acc のビッ ト [39:32] を RdHi のビッ ト [7:0] にコピーします。<br />
• Acc のビッ ト [39] を RdHi のビッ ト [31:8] にコピーして 値 を 符 号 拡 張 し ま<br />
す。<br />
アーキテクチャ<br />
これらの <strong>ARM</strong> コプロセッサ 0 命 令 は、 XScale プロセッサでのみ 使 用 できま<br />
す。<br />
これらの 命 令 の Thumb バージ ョ ンはあ り ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-157<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
サンプル<br />
MAR<br />
MRA<br />
MARNE<br />
MRAGT<br />
acc0, r0, r1<br />
r4, r5, acc0<br />
acc0, r9, r2<br />
r4, r8, acc0<br />
4-158 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.11 Thumb での 命 令 の 幅 の 選 択<br />
<strong>ARM</strong>v6T2 以 降 のプ ロ セ ッ サの Thumb コードを 書 く と き、 命 令 の 中 には 16<br />
ビッ トエンコーディングと 32 ビッ トエンコーディングのどちらでも 使 用 でき<br />
るものがあります。 ど ち ら も 可 能 な 場 合 、 アセンブ ラ は 通 常 16 ビットエン<br />
コーディ ングを 生 成 します ( 例 外 については、 「「 異 な る 動 作 を 持 つ 命 令 」」<br />
を 参 照 )。<br />
4.11.1 命 令 の 幅 の 指 定 子 : .W と .N<br />
アセンブ ラ の こ の 動 作 を 制 御 する には .W 幅 指 定 子 を 使 用 し ます。 これは 16<br />
ビ ッ ト エン コーデ ィ ン グが 使 用 で き る 場 合 で も 32 ビッ トエンコーディングが<br />
使 用 さ れる よ う に し ます。<br />
.W 指 定 子 は <strong>ARM</strong> または Thumb (<strong>ARM</strong>v6T2 以 降 ) コー ド にアセンブルする 可<br />
能 性 のあ る コー ド で 使 用 で き ます。 .W 指 定 子 は <strong>ARM</strong> コード と してアセンブル<br />
する と きには 無 視 されます。<br />
確 実 に 16 ビッ トでエンコードされるようにするには、.N 幅 指 定 子 を 使 用 で き<br />
ます。 この 場 合 、 16 ビッ トでエンコードできない 命 令 に 対 して 使 用 された 場<br />
合 や <strong>ARM</strong> コード と してアセンブルする と き、 エラーが 出 ます。<br />
命 令 の 幅 指 定 子 は、 命 令 ニーモニ ッ ク と 条 件 コー ド ( 存 在 する 場 合 ) の 直 後<br />
に 置 き ます。 次 に 例 を 示 し ます。<br />
BCS.W label ; forces 32-bit instruction even for a short branch<br />
B.N label : faults if label out of range for 16-bit instruction<br />
4.11.2 異 なる 動 作 を 持 つ 命 令<br />
参 考 と し て、 32 ビ ッ ト 命 令 が 使 用 でき る ターゲ ッ ト で 失 敗 が 発 生 し て も、 .W<br />
指 定 な し の LDR、 ADR、 およびB が 常 に 16 ビ ッ ト 命 令 を 生 成 し ます。<br />
外 部 参 照 では、 LDR および B に .W が 指 定 されていな く て も 常 に 32 ビット 命 令<br />
が 生 成 されます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-159<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.11.3 診 断 警 告<br />
診 断 警 告 を 使 用 し て、 .W を 指 定 し たため、 分 岐 命 令 が 16 ビッ トでエンコード<br />
でき るにもかかわらず 32 ビ ッ ト でエン コー ド さ れた と き 検 出 さ れる よ う にで<br />
きます。<br />
--diag_warning 1607<br />
こ の 警 告 はデフ ォル ト ではオフになっています。<br />
注<br />
こ の 診 断 コー ド は 再 配 置 さ れた 分 岐 命 令 には 警 告 が 表 示 さ れません。 こ れは<br />
最 終 的 なア ド レ スが 未 知 のためです。 分 岐 が 32 ビ ッ ト 命 令 で も 範 囲 外 にな る<br />
場 合 、 リ ン カがベニア を 挿 入 する こ と さ えあ り ます。<br />
4-160 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.12 ThumbEE 命 令<br />
ENTERX と LEAVEX を 除 き、 これらの ThumbEE 命 令 はアセンブ ラ が ThumbEE 状<br />
態 に 切 り 替 わった と きにのみ 受 け 入 れられます。 切 り 替 えは --thumbx コマン<br />
ドラインオプションまたは THUMBX ディレクティブを 使 用 します。<br />
こ のセ ク シ ョ ンは 以 下 のサブセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「ENTERX、 LEAVEX」 (ページ 4-162)<br />
Thumb 状 態 と ThumbEE 状 態 の 間 で 切 り 替 えを 行 う 命 令 です。<br />
• 「CHKA」 (ページ 4-163)<br />
配 列 をチェ ッ クする 命 令 です。<br />
• 「HB、 HBL、 HBLP、 HBP」 (ページ 4-164)<br />
ハン ド ラ の 分 岐 命 令 です。 指 定 さ れたハン ド ラ に 分 岐 し ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-161<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.12.1 ENTERX、 LEAVEX<br />
Thumb 状 態 と ThumbEE 状 態 の 間 で 切 り 替 えを 行 う 命 令 です。<br />
構 文<br />
ENTERX<br />
LEAVEX<br />
使 用 法<br />
ENTERX を 使 用 する と、 Thumb 状 態 か ら ThumbEE 状 態 に 切 り 替 わ る か、 ま たは<br />
ThumbEE 状 態 が 維 持 さ れます。<br />
LEAVEX を 使 用 する と、 ThumbEE 状 態 か ら Thumb 状 態 に 切 り 替 わ る か、 ま たは<br />
Thumb 状 態 が 維 持 さ れます。<br />
IT ブロッ ク 内 では、ENTERX または LEAVEX を 使 用 しないで 下 さい。<br />
アーキテクチャ<br />
これらの 命 令 は、 <strong>ARM</strong> 命 令 セ ッ ト では 使 用 で き ません。<br />
これらの 32 ビッ ト Thumb 命 令 および Thumb-2EE 命 令 は、 Thumb-2EE をサ<br />
ポー ト する <strong>ARM</strong>v7 で 使 用 でき ます。<br />
これらの 命 令 の 16 ビッ ト Thumb-2 バージ ョ ンはあ り ません。<br />
詳 細 については、 『<strong>ARM</strong> Architecture Reference Manual Thumb-2 Execution<br />
Environment Supplement』 を 参 照 して 下 さい。<br />
4-162 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.12.2 CHKA<br />
CHKA ( 配 列 のチェ ッ ク) は、 2 つのレジス タにあ る 符 号 な しの 値 を 比 較 し ま<br />
す。<br />
最 初 のレ ジ ス タ の 値 が 2 番 目 のレ ジ ス タ の 値 以 下 か 等 し い 場 合 、 こ の 命 令 に<br />
より、プログラムカウンタが lr にコピーされ、 IndexCheck ハン ド ラへの 分 岐<br />
が 発 生 し ます。<br />
構 文<br />
CHKA Rn, Rm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
Rn 配 列 のサ イ ズを 指 定 し ます。 r15 は 使 用 し ないで 下 さ い。<br />
Rm<br />
配 列 の イ ンデ ク ス を 指 定 し ます。 r13 と r15 を 使 用 しないで 下 さ<br />
い。<br />
アーキテクチャ<br />
<strong>ARM</strong> 状 態 では 使 用 で き ません。<br />
この 16 ビッ ト ThumbEE 命 令 は Thumb-2EE をサポートする <strong>ARM</strong>v7 のみで 使<br />
用 でき ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-163<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.12.3 HB、 HBL、 HBLP、 HBP<br />
ハン ド ラ の 分 岐 命 令 です。 指 定 さ れたハン ド ラ に 分 岐 し ます。<br />
この 命 令 は、 必 要 に 応 じて、 復 帰 アドレスを lr にス ト アしたり、 パラ メータ<br />
をハン ド ラに 渡 した りする こ とができます。 また、 その 両 方 を 行 う こ と もで<br />
きます。<br />
構 文<br />
HB{L} #HandlerID<br />
HB{L}P #immed, #HandlerID<br />
各 パ ラ メ ータには 以 下 の 意 味 があ り ます。<br />
L<br />
P<br />
immed<br />
HandlerID<br />
任 意 に 指 定 で き る 接 尾 文 字 です。 L を 指 定 する と 、 復 帰 ア ド レ ス<br />
が lr に 保 存 されます。<br />
任 意 に 指 定 で き る 接 尾 文 字 です。 P を 指 定 する と 、immed の 値 が r8<br />
のハン ド ラに 渡 されます。<br />
イ ミディエー ト 値 を 指 定 します。 L を 指 定 した 場 合 、 immed に 0 ~<br />
31 の 範 囲 の 値 を 指 定 する 必 要 があ り ます。 こ の 接 尾 文 字 を 指 定<br />
しない 場 合 、immed には 0 ~ 7 の 範 囲 の 値 を 指 定 する 必 要 があ り<br />
ます。<br />
呼 び 出 すハン ド ラ の イ ンデ ク ス 番 号 を 指 定 し ます。 P を 指 定 した<br />
場 合 、 HandlerID に 0 ~ 31 の 範 囲 の 値 を 指 定 する 必 要 があ り ます。<br />
こ の 接 尾 文 字 を 指 定 し ない 場 合 、 HandlerID には 0 ~ 255 の 範 囲 の<br />
値 を 指 定 する 必 要 があ り ます。<br />
アーキテクチャ<br />
これらの 命 令 は <strong>ARM</strong> 状 態 では 使 用 で き ません。<br />
これらの 16 ビッ ト 命 令 は、 Thumb-2EE をサポートする <strong>ARM</strong>v7 の ThumbEE<br />
状 態 でのみ 使 用 で き ます。<br />
4-164 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.13 疑 似 命 令<br />
<strong>ARM</strong> アセンブ ラ は、 多 く の 疑 似 命 令 をサポー ト し ています。 こ れら の 疑 似 命<br />
令 は、 アセンブ リ 時 に 適 切 な <strong>ARM</strong> 命 令 、 Thumb-2 命 令 、 ま たは Thumb-2 以<br />
前 の Thumb 命 令 の 組 み 合 わせに 変 換 さ れます。<br />
疑 似 命 令 については、 以 下 のサブセ ク シ ョ ンを 参 照 し て 下 さい。<br />
• 「ADRL 疑 似 命 令 」 (ページ 4-166)<br />
プ ロ グ ラ ム 相 対 ア ド レ ス ま たはレ ジ ス タ 相 対 ア ド レ ス ( 中 範 囲 、 位 置 非<br />
依 存 ) を レ ジ ス タ に ロー ド し ます。<br />
• 「MOV32 疑 似 命 令 」 (ページ 4-168)<br />
32 ビ ッ ト 定 数 値 ま たはア ド レ ス ( 範 囲 無 制 限 、 位 置 依 存 ) を レ ジ ス タ<br />
にロード します。 <strong>ARM</strong>v6T2 以 降 でのみ 使 用 で き ます。<br />
• 「LDR 疑 似 命 令 」 (ページ 4-170)<br />
32 ビ ッ ト 定 数 値 ま たはア ド レ ス ( 範 囲 無 制 限 、 位 置 依 存 ) を レ ジ ス タ<br />
にロード します。 すべての <strong>ARM</strong> アーキテクチャで 使 用 でき ます。<br />
• 「UND 疑 似 命 令 」 (ページ 4-173)<br />
アーキテクチャ 上 で 定 義 されていない 命 令 を 生 成 し ます。 すべての <strong>ARM</strong><br />
アーキテクチャで 使 用 でき ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-165<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.13.1 ADRL 疑 似 命 令<br />
プログラム 相 対 アドレスまたはレジスタ 相 対 アドレスをレジスタにロードし<br />
ます。 ADR 疑 似 命 令 と 似 ていますが、 ADRL では 2 つのデータ 処 理 命 令 が 生 成 さ<br />
れるため、ADR よ り 広 範 囲 のア ド レ ス を ロー ド で き ます。<br />
注<br />
ADRL は Thumb-2 以 前 の プロセッサの Thumb 命 令 を アセンブルする と き には 使<br />
用 でき ません。<br />
構 文<br />
ADRL{cond} Rd,label<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond<br />
Rd<br />
label<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
ロー ド する レ ジ ス タ を 指 定 し ます。<br />
レ ジ ス タ 相 対 式 ま たはプ ロ グ ラ ム 相 対 式 を 指 定 し ます。 詳 細 につ<br />
いては、 「レ ジ ス タ 相 対 式 と プ ロ グ ラ ム 相 対 式 」 (ページ 3-39)<br />
を 参 照 して 下 さい。<br />
使 用 法<br />
ADRL は 常 に 2 つの 32 ビッ ト 命 令 にアセンブルされます。 1 つの 命 令 でア ド レ ス<br />
に 到 達 で き る 場 合 で も、 2 番 目 の 冗 余 命 令 が 生 成 さ れます。<br />
アセンブラが 2 つの 命 令 でア ド レ ス を 作 成 で き ない 場 合 は、 エ ラー メ ッ セー<br />
ジが 生 成 され、 アセンブルに 失 敗 し ます。 よ り 広 い 範 囲 のア ド レ ス を ロー ド<br />
する 方 法 については、 「LDR 疑 似 命 令 」 (ページ 4-170) を 参 照 して 下 さい。<br />
「レジスタへの 定 数 のロード」 (ページ 2-27) も 参 照 して 下 さい。<br />
ADRL は、 ア ド レ スがプ ロ グ ラ ム 相 対 ま たはレ ジ ス タ 相 対 であ る ため、 位 置 非<br />
依 存 コー ド を 生 成 し ます。<br />
label にプ ロ グ ラ ム 相 対 式 を 指 定 する 場 合 は、 ADRL 疑 似 命 令 と 同 じ アセンブ ラ<br />
領 域 内 のア ド レ ス を 指 定 する 必 要 があ り ます (「AREA」 (ページ 7-81) を 参<br />
照 )。<br />
4-166 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
BX または BLX 命 令 の ターゲ ッ ト を 生 成 する ために ADRL を 使 用 する と きは、<br />
ターゲッ トに Thumb 命 令 が 含 まれてい る 場 合 、 そのア ド レ スの Thumb ビッ ト<br />
(ビ ッ ト 0) を 設 定 する 必 要 があ り ます。<br />
アーキテクチャ と 範 囲<br />
利 用 で き る 範 囲 は、 使 用 する 命 令 セ ッ ト に よ って 異 な り ます。<br />
<strong>ARM</strong><br />
バイ ト 境 界 またはハーフワード 境 界 で 整 列 されているアド<br />
レスから ±64KB の 範 囲<br />
ワード 境 界 で 整 列 されているアド レスから ±256KB バイ ト<br />
の 範 囲<br />
32 ビッ トの Thumb バイ ト、 ハーフワード、 またはワード 境 界 で 整 列 されて<br />
いるアドレスから ±1MB の 範 囲<br />
16 ビッ トの Thumb ADRL 命 令 は 使 用 で き ません。<br />
与 えられている 範 囲 は、 Thumb コードでは 現 在 の 命 令 のアド レスから 4 バイ<br />
ト、 <strong>ARM</strong> コードでは 現 在 の 命 令 のアド レスから 2 ワードの 地 点 からの 範 囲 で<br />
す。 境 界 調 整 が こ の 位 置 か ら 16 バ イ ト 以 上 の 相 対 位 置 にあ る 場 合 、 よ り 広 範<br />
囲 のア ド レ ス を 利 用 でき ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-167<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.13.2 MOV32 疑 似 命 令<br />
以 下 のいずれかの 値 を レ ジ ス タ に ロー ド し ます。<br />
• 32 ビット 定 数 値<br />
• 任 意 のア ド レ ス<br />
MOV32 は 常 に 2 つの 32 ビット 命 令 、MOV と MOVT の 対 を 生 成 し ます。 こ の 命 令 対<br />
を 使 用 して、 32 ビット 定 数 をロードしたり、 32 ビ ッ ト ア ド レ ス 空 間 全 体 にア<br />
クセスしたりすることができます。<br />
構 文<br />
MOV32{cond} Rd, expr<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond<br />
Rd<br />
expr<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
ロー ド 先 のレ ジ ス タ を 指 定 し ます。 Rd に sp と pc は 指 定 でき ませ<br />
ん。<br />
以 下 のいずれかを 指 定 で き ます。<br />
symbol<br />
このプログラム 領 域 または 別 のプログラム 領<br />
域 内 の ラベルです。<br />
constant<br />
任 意 の 32 ビット 定 数 です。<br />
symbol + constant<br />
ラベルと 32 ビ ッ ト 定 数 を 組 み 合 わせたもので<br />
す。<br />
4-168 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
使 用 法<br />
MOV32 疑 似 命 令 の 主 な 目 的 は 以 下 の と お り です。<br />
• 1 つの 命 令 でイ ミディエー ト 値 を 生 成 できない 場 合 に リ テラル 定 数 を 生<br />
成 する こ と 。<br />
• プログラム 相 対 アドレスまたは 外 部 アドレスをレジスタにロードするこ<br />
と。 このアドレスは、 リンカが MOV32 を 保 持 する ELF セクションをどこ<br />
に 配 置 し て も 有 効 です。<br />
注<br />
こ の 方 法 で ロー ド さ れたア ド レ スは リ ン ク 時 に 固 定 さ れる ため、 こ の<br />
コー ド は 位 置 依 存 コー ド にな り ます。<br />
ローカルラベルが Thumb コー ド を 参 照 する 場 合 、 MOV32 はア ド レスの Thumb<br />
ビッ ト (ビッ ト 0) が 設 定 されます。<br />
アーキテクチャ<br />
こ の 疑 似 命 令 は、 <strong>ARM</strong>、 Thumb 共 に <strong>ARM</strong>v6T2 以 降 で 使 用 で き ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-169<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.13.3 LDR 疑 似 命 令<br />
以 下 のいずれかの 値 を レ ジ ス タ に ロー ド し ます。<br />
• 32 ビット 定 数 値<br />
• アドレス<br />
注<br />
このセクションでは、LDR 疑 似 命 令 についてのみ 説 明 し ます。 LDR 命 令 について<br />
は、 「 メ モ リ ア ク セス 命 令 」 (ページ 4-10) を 参 照 して 下 さい。<br />
構 文<br />
LDR{cond}{.W} Rt, =expr<br />
LDR{cond}{.W} Rt, =label_expr<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
.W 任 意 に 指 定 で き る 幅 指 定 子 を 指 定 し ます。<br />
Rt<br />
ロー ド 先 のレ ジ ス タ を 指 定 し ます。<br />
expr 数 値 定 数 を 求 め る 式 を 指 定 し ます (「 数 値 定 数 」 (ページ 3-30)<br />
を 参 照 )。<br />
• expr の 値 が 範 囲 内 の 場 合 、 アセンブラは MOV 命 令 ま たは MVN<br />
命 令 を 生 成 します。<br />
• expr の 値 が MOV または MVN 命 令 の 範 囲 外 の 場 合 、 アセンブ ラ<br />
はその 定 数 をリテラルプールに 配 置 し、 リテラルプールか<br />
ら 定 数 を 読 み 出 すプ ロ グ ラ ム 相 対 LDR 命 令 を 生 成 し ます。<br />
定 数 の ロー ド については、 「LDR Rd, =const を 使 用 したロード」<br />
(ページ 2-32) を 参 照 して 下 さい。<br />
label_expr<br />
ア ド レ スのプ ロ グ ラ ム 相 対 式 ま たは 外 部 式 を ラベルか ら 数 値 定<br />
数 を 加 減 算 する 形 式 で 指 定 し ます ( 詳 細 については、 「レジスタ<br />
相 対 式 と プ ロ グ ラ ム 相 対 式 」 (ページ 3-39) を 参 照 )。 アセンブラ<br />
は、 label_expr の 値 を リ テ ラルプールに 配 置 し、 リ テ ラルプール<br />
からこの 値 をロードするプログラム 相 対 LDR 命 令 を 生 成 し ます。<br />
4-170 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
label_expr が 外 部 式 であ る か、 ま たは 現 在 のセ ク シ ョ ンに 含 まれ<br />
ていない 場 合 、 アセンブ ラ は リ ン カ 再 配 置 デ ィ レ ク テ ィ ブをそ<br />
のオブジェ ク ト フ ァ イル 内 に 入 れます。 リンカはリンク 時 にアド<br />
レスを 生 成 します。<br />
label_expr がローカルラベル (「ローカルラベル」 (ページ 3-33)<br />
を 参 照 ) の 場 合 、 アセンブ ラ は リ ンカ 再 配 置 デ ィ レ ク テ ィ ブを<br />
オブジェ ク ト フ ァ イル 内 に 入 れ、 そのローカルラベルのシンボ<br />
ルを 生 成 します。 ア ド レ スは リ ン ク 時 に 生 成 さ れます。 ローカル<br />
ラベルが Thumb コードを 参 照 する 場 合 、 アド レスの Thumb ビッ<br />
ト (ビッ ト 0) が 設 定 されます。<br />
注<br />
RVCT v2.2 では、 ア ド レ スの Thumb ビッ トが 設 定 されませんで<br />
した。 この 動 作 に 依 存 するコードでは、 コマンドラインオプショ<br />
ン --untyped_local_labels を 使 用 して、 アセンブラが Thumb コー<br />
ド 内 の ラベルを 参 照 する 際 に Thumb ビッ トを 設 定 しないように<br />
します。<br />
使 用 法<br />
LDR 疑 似 命 令 の 主 な 目 的 は 以 下 の と お り です。<br />
• イミディエート 値 が MOV 命 令 および MVN 命 令 の 範 囲 外 にあ る ため、 レ ジ<br />
スタに 移 動 できない 場 合 に、 リテラル 定 数 を 生 成 すること。<br />
• プログラム 相 対 アドレスまたは 外 部 アドレスをレジスタにロードするこ<br />
と。 このアドレスは、 リンカが LDR を 保 持 する ELF セクションをどこに<br />
配 置 し て も 有 効 です。<br />
注<br />
こ の 方 法 で ロー ド さ れたア ド レ スは リ ン ク 時 に 固 定 さ れる ため、 こ の<br />
コー ド は 位 置 依 存 コー ド にな り ます。<br />
pc から リテラルプール 内 の 値 までのオフセッ トは ±4KB (<strong>ARM</strong>、 32 ビット<br />
Thumb-2) よ り 小 さいか、 0 ~ +1KB (16 ビッ ト Thumb-2、 Thumb-2 以 前 の<br />
Thumb) の 範 囲 内 になってい る 必 要 があ り ます。 こ の と き 範 囲 内 に リ テ ラ ル<br />
プールがあ る こ と を 必 ず 確 認 し て 下 さ い。 詳 細 については、 「LTORG」 (ペー<br />
ジ 7-20) を 参 照 して 下 さい。<br />
参 照 さ れてい る ラベルが Thumb コード 内 にある 場 合 、 LDR 疑 似 命 令 は<br />
label_expr の Thumb ビット (ビッ ト 0) を 設 定 します。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-171<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
LDR の 使 用 方 法 、 および MOV と MVN の 詳 細 については、 「レジスタへの 定 数 の<br />
ロード」 (ページ 2-27) を 参 照 して 下 さい。<br />
Thumb コード 内 の LDR<br />
<strong>ARM</strong>v6T2 以 降 のプ ロ セ ッ サでは、 .W 幅 指 定 子 を 使 って LDR が 32 ビッ トの<br />
Thumb コード 命 令 を 生 成 する よ う にで き ます。 LDR.W は、 定 数 を 16 ビッ トの<br />
MOV にロードできるときでも、 リテラルプールが 16 ビッ ト pc 相 対 ロー ド の 範<br />
囲 内 にあ る と き で も 、 常 に 32 ビ ッ ト 命 令 を 生 成 します。<br />
定 数 の 値 がアセンブ ラ の 初 回 パス で 未 知 の 場 合 、 .W なしの LDR は 16 ビッ ト<br />
Thumb コード 命 令 を 生 成 します。 その 結 果 32 ビッ トの MOV または MVN 命 令 で<br />
生 成 で き る 定 数 で も 16 ビッ ト pc 相 対 ロー ド にな り ます。 定 数 が 初 回 パスで 既<br />
知 で、 32 ビットの MOV または MVN 命 令 を 使 って 生 成 で き る 場 合 は、 MOV または<br />
MVN 命 令 が 使 用 さ れます。<br />
LDR 疑 似 命 令 は 16 ビットフラグを 設 定 する MOV 命 令 を 生 成 する こ と はあ り ませ<br />
ん。 アセンブラの --diag_warning 1727 コマンド ラインオプショ ンを 使 用 して、<br />
16 ビ ッ ト 命 令 の 使 用 を 確 認 でき ます。<br />
リ テ ラ ルプールか ら ロー ド せずに 定 数 やア ド レ ス を 生 成 する 方 法 については、<br />
「MOV32 疑 似 命 令 」 (ページ 4-168) を 参 照 して 下 さい。<br />
サンプル<br />
LDR r3,=0xff0 ; loads 0xff0 into r3<br />
; => MOV.W r3,#0xff0<br />
LDR r1,=0xfff ; loads 0xfff into r1<br />
; => LDR r1,[pc,offset_to_litpool]<br />
; ...<br />
; litpool DCD 0xfff<br />
LDR r2,=place ; loads the address of<br />
; place into r2<br />
; => LDR r2,[pc,offset_to_litpool]<br />
; ...<br />
; litpool DCD place<br />
4-172 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4.13.4 UND 疑 似 命 令<br />
アーキテクチャ 上 で 定 義 されていない 命 令 を 生 成 し ます。 定 義 されていない<br />
命 令 を 実 行 し よ う と する と 未 定 義 命 令 の 例 外 が 発 生 し ます。 アーキテクチャ<br />
上 で 定 義 さ れていない 命 令 は 未 定 義 のま まにな り ます。<br />
構 文<br />
UND{cond}{.W} {#expr}<br />
各 パラ メ ータには 以 下 の 意 味 があ り ます。<br />
cond<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。 Thumb-2 以 前 の Thumb コー ド の こ の 疑 似 命 令 では、 cond<br />
は 使 用 でき ません。<br />
.W 任 意 に 指 定 で き る 幅 指 定 子 を 指 定 し ます。<br />
expr<br />
数 値 定 数 を 求 め る 式 を 指 定 し ます。 表 4-8 は 命 令 におけ る expr の<br />
範 囲 と エン コーデ ィ ングを 示 し た も のです。 こ こ で、 Y は expr<br />
をエンコードするビッ ト 位 置 を 示 し、 V は 条 件 コードをエンコー<br />
ドする 4 ビットを 示 します。<br />
expr が 省 略 された 場 合 、 0 が 使 用 されます。<br />
表 4-8 expr の 範 囲 と エ ン コーデ ィ ング<br />
命 令 エ ン コーデ ィ ング expr のビッ ト 数 範 囲<br />
<strong>ARM</strong> 0xV7FYYYFY 16 0-65535<br />
32 ビット Thumb 0xF7FYAYFY 12 0-4095<br />
16 ビット Thumb 0xDEYY 8 0-255<br />
Thumb コード 内 の UND<br />
<strong>ARM</strong>v6T2 以 降 のプ ロ セ ッ サでは、 .W 幅 指 定 子 を 使 って UND が 32 ビットの<br />
Thumb コード 命 令 を 生 成 する よ う にで き ます。 expr が 0 ~ 255 の 範 囲 でも<br />
UND.W は 常 に 32 ビ ッ ト 命 令 を 生 成 します。<br />
逆 アセンブ リ<br />
こ の 疑 似 命 令 か ら のエン コーデ ィ ングは DCI に 逆 アセンブルし ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 4-173<br />
Non-Confidential
<strong>ARM</strong> 命 令 と Thumb 命 令<br />
4-174 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
第 5 章<br />
NEON と VFP プログラ ミング<br />
本 章 では、 NEON と VFP コプロセッサのアセンブリプログラ ミ ングについ<br />
て 説 明 し ます。<br />
• 「 命 令 の 概 要 」 (ページ 5-3)<br />
• 「NEON と VFP 向 けのアーキテ クチャサポー ト 」 (ページ 5-9)<br />
• 「 拡 張 レ ジ ス タバン ク 」 (ページ 5-10)<br />
• 「 条 件 コー ド 」 (ページ 5-13)<br />
• 「 一 般 的 な 情 報 」 (ページ 5-15)<br />
• 「NEON と VFP に 共 通 の 命 令 」 (ページ 5-24)<br />
• 「NEON 論 理 演 算 と 比 較 演 算 」 (ページ 5-33)<br />
• 「NEON 汎 用 データ 処 理 命 令 」 (ページ 5-43)<br />
• 「NEON シフ ト 命 令 」 (ページ 5-57)<br />
• 「NEON 汎 用 算 術 命 令 」 (ページ 5-65)<br />
• 「NEON 乗 算 命 令 」 (ページ 5-81)<br />
• 「NEON 要 素 と 構 造 体 の ロー ド / ストア 命 令 」 (ページ 5-87)<br />
• 「NEON 疑 似 命 令 および VFP 疑 似 命 令 」 (ページ 5-95)<br />
• 「NEON / VFP システムレジスタ」 (ページ 5-104)<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-1<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
• 「ゼロ ク リ アモー ド 」 (ページ 5-109)<br />
• 「VFP 命 令 」 (ページ 5-111)<br />
• 「VFP ベクタモード」 (ページ 5-123)<br />
5-2 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.1 命 令 の 概 要<br />
このセクショ ンでは、 NEON 命 令 と VFP 命 令 の 概 要 を 説 明 し ます。 このセク<br />
シ ョ ン を 使 用 し て、 本 章 の 残 り の 部 分 に 記 載 さ れてい る 各 命 令 および 疑 似 命<br />
令 の 説 明 に 移 動 でき ます。 説 明 する 内 容 は 以 下 の と お り です。<br />
• 「NEON 命 令 」<br />
• 「 共 通 の NEON 命 令 と VFP 命 令 」 (ページ 5-6)<br />
• 「VFP 命 令 」 (ページ 5-8)<br />
5.1.1 NEON 命 令<br />
表 5-1 に NEON 命 令 の 概 要 を 示 し ます。 こ れ ら の 命 令 は VFP では 使 用 で き ま<br />
せん。<br />
表 5-1 NEON 命 令 の 参 照 ページ<br />
ニーモニ ッ ク 概 要 ページ<br />
VABA, VABD 絶 対 差 、 絶 対 差 と 累 積 (ページ 5-66)<br />
VABS 絶 対 値 (ページ 5-67)<br />
VACGE, VACGT 以 上 ( 絶 対 値 比 較 )、 超 (ページ 5-39)<br />
VACLE, VACLT 以 下 ( 絶 対 値 比 較 )、 未 満 ( 疑 似 命 令 ) (ページ 5-102)<br />
VADD 加 算 (ページ 5-68)<br />
VADDHN 加 算 、 上 位 半 分 の 選 択 (ページ 5-70)<br />
VAND ビ ッ ト 単 位 論 理 積 (ページ 5-34)<br />
VAND ビ ッ ト 単 位 論 理 積 ( 疑 似 命 令 ) (ページ 5-100)<br />
VBIC ビ ッ ト 単 位 ビ ッ ト ク リ ア (レ ジ ス タ) (ページ 5-34)<br />
VBIC ビッ ト 単 位 ビッ ト クリア (イミディエート) (ページ 5-35)<br />
VBIF, VBIT, VBSL<br />
False の 場 合 はビ ッ ト 単 位 挿 入 、 True の 場 合 はビ ッ ト 単 位 を 挿 入 、 および<br />
選 択<br />
(ページ 5-37)<br />
VCEQ, VCLE, VCLT 等 し い ( 比 較 )、 以 下 ( 比 較 )、 未 満 ( 比 較 ) (ページ 5-40)<br />
VCLE, VCLT 以 下 ( 比 較 )、 未 満 ( 比 較 、 疑 似 命 令 ) (ページ 5-103)<br />
VCLS, VCLZ, VCNT<br />
先 行 符 号 ビ ッ ト カ ウ ン ト 、 先 行 ゼ ロ カ ウ ン ト 、 およびセ ッ ト ビ ッ ト カ ウ<br />
ント<br />
(ページ 5-76)<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-3<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
表 5-1 NEON 命 令 の 参 照 ページ ( 続 き)<br />
ニーモニ ッ ク 概 要 ページ<br />
VCVT<br />
固 定 小 数 点 ま たは 整 数 か ら 浮 動 小 数 点 へ、 浮 動 小 数 点 か ら 整 数 ま たは 固<br />
定 小 数 点 への 変 換<br />
(ページ 5-44)<br />
VCVT 半 精 度 浮 動 小 数 点 数 と 単 精 度 浮 動 小 数 点 数 間 の 変 換 (ページ 5-46)<br />
VDUP ベ ク タ の 全 レーンへのス カ ラ の 複 製 (ページ 5-47)<br />
VEXT 抽 出 (ページ 5-48)<br />
VCGE, VCGT 以 上 ( 比 較 )、 超 ( 比 較 ) (ページ 5-40)<br />
VEOR ビ ッ ト 単 位 排 他 的 論 理 和 (XOR) (ページ 5-34)<br />
VHADD, VHSUB 二 分 加 算 、 二 分 減 算 (ページ 5-71)<br />
VMAX, VMIN 最 大 値 、 最 小 値 (ページ 5-74)<br />
VLD ベ ク タ ロー ド (ページ 5-87)<br />
VMLA, VMLS 積 和 、 積 差 (ベ ク タ) (ページ 5-82)<br />
VMLA, VMLS 積 和 、 積 差 (ス カ ラ に よ る) (ページ 5-84)<br />
VMOV 移 動 (イ ミ デ ィ エー ト ) (ページ 5-49)<br />
VMOV 移 動 (レ ジ ス タ) (ページ 5-38)<br />
VMOVL, VMOV{U}N Long 移 動 、 Narrow 移 動 (レ ジ ス タ) (ページ 5-50)<br />
VMUL 乗 算 (ベ ク タ) (ページ 5-82)<br />
VMUL 乗 算 (ス カ ラ に よ る) (ページ 5-84)<br />
VMVN 負 の 移 動 (イ ミ デ ィ エー ト ) (ページ 5-49)<br />
VNEG 否 定 (ページ 5-67)<br />
VORN ビ ッ ト 単 位 否 定 論 理 和 (ページ 5-34)<br />
VORN ビ ッ ト 単 位 否 定 論 理 和 ( 疑 似 命 令 ) (ページ 5-100)<br />
VORR ビ ッ ト 単 位 論 理 和 (レ ジ ス タ) (ページ 5-34)<br />
VORR ビ ッ ト 単 位 論 理 和 (イ ミ デ ィ エー ト ) (ページ 5-35)<br />
VPADD, VPADAL ペア ワ イ ズ 加 算 、 ペア ワ イ ズ 加 算 累 積 (ページ 5-72)<br />
5-4 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
表 5-1 NEON 命 令 の 参 照 ページ ( 続 き)<br />
ニーモニ ッ ク 概 要 ページ<br />
VPMAX, VPMIN ペア ワ イ ズ 最 大 値 、 ペア ワ イ ズ 最 小 値 (ページ 5-74)<br />
VQABS 絶 対 値 、 サチュ レー ト (ページ 5-67)<br />
VQADD 加 算 、 サチュ レー ト (ページ 5-68)<br />
VQDMLAL, VQDMLSL サチュ レー ト ダブル 積 和 、 積 差 (ページ 5-85)<br />
VQMOV{U}N サチュ レー ト 移 動 (レ ジ ス タ) (ページ 5-50)<br />
VQDMUL サチュ レー ト ダブル 乗 算 (ページ 5-85)<br />
VQDMULH 上 位 半 分 を 返 すサチュ レー ト ダブル 乗 算 (ページ 5-86)<br />
VQNEG 否 定 、 サチュ レー ト (ページ 5-67)<br />
VQRDMULH 上 位 半 分 を 返 すサチュ レー ト ダブル 乗 算 (ページ 5-86)<br />
VQRSHL 左 シフ ト 、 丸 め、 サチュ レー ト ( 符 号 付 き 変 数 に よ る) (ページ 5-60)<br />
VQRSHR 右 シフト、 丸 め、 サチュレート (イミディエートによる) (ページ 5-63)<br />
VQSHL 左 シフ ト 、 サチュ レー ト (イ ミ デ ィ エー ト に よ る) (ページ 5-58)<br />
VQSHL 右 シフ ト 、 サチュ レー ト ( 符 号 付 き 変 数 に よ る) (ページ 5-60)<br />
VQSHR 右 シフ ト 、 サチュ レー ト (イ ミ デ ィ エー ト に よ る) (ページ 5-63)<br />
VQSUB 減 算 、 サチュ レー ト (ページ 5-68)<br />
VRADDH 加 算 、 上 位 半 分 の 選 択 、 丸 め (ページ 5-70)<br />
VRECPE 逆 数 の 推 定 (ページ 5-77)<br />
VRECPS 逆 数 のス テ ッ プ (ページ 5-79)<br />
VREV 要 素 の 順 番 の 反 転 (ページ 5-52)<br />
VRHADD 二 分 加 算 、 丸 め (ページ 5-71)<br />
VRSHR, VRSRA 右 シフ ト し て 丸 め、 右 シフ ト 、 丸 め、 累 積 (イ ミ デ ィ エー ト によ る) (ページ 5-61)<br />
VRSUBH 減 算 、 上 位 半 分 の 選 択 、 丸 め (ページ 5-70)<br />
VRSQRTE 逆 平 方 根 の 推 定 (ページ 5-77)<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-5<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
表 5-1 NEON 命 令 の 参 照 ページ ( 続 き)<br />
ニーモニ ッ ク 概 要 ページ<br />
VRSQRTS 逆 平 方 根 のス テ ッ プ (ページ 5-79)<br />
VSHL 左 シフ ト (イ ミ デ ィ エー ト に よ る) (ページ 5-58)<br />
VSHR 右 シフ ト (イ ミ デ ィ エー ト に よ る) (ページ 5-61)<br />
VSLI 左 シフ ト し て 挿 入 (ページ 5-64)<br />
VSRA 右 シフ ト 、 累 積 (イ ミ デ ィ エー ト に よ る) (ページ 5-61)<br />
VSRI 右 シフ ト し て 挿 入 (ページ 5-64)<br />
VST ベ ク タ ス ト ア (ページ 5-87)<br />
VSUB 減 算 (ページ 5-68)<br />
VSUBH 減 算 、 上 位 半 分 の 選 択 (ページ 5-70)<br />
VSWP ベ ク タ のス ワ ッ プ (ページ 5-53)<br />
VTBL, VTBX ベ ク タ テーブルの 検 索 (ページ 5-54)<br />
VTST テ ス ト ビ ッ ト (ページ 5-42)<br />
VTRN ベ ク タ 置 換 (ページ 5-55)<br />
VUZP, VZIP ベ ク タ の イ ン ター リ ーブ と イ ン ター リ ーブの 解 除 (ページ 5-56)<br />
5.1.2 共 通 の NEON 命 令 と VFP 命 令<br />
表 5-2 に NEON と VFP に 共 通 する 命 令 の 概 要 を 示 し ます。<br />
表 5-2 NEON と VFP に 共 通 の 命 令 の 参 照 ページ<br />
ニーモニ ッ ク 概 要 ページ 演 算<br />
アーキテ<br />
クチャ<br />
VLDM 多 重 ロー ド (ページ 5-27) - すべて<br />
VLDR ロード (「VLDR 疑 似 命 令 」 (ページ 5-96) も 参 照 ) (ページ 5-25) ス カ ラ すべて<br />
ロード (ポス ト インク リ メ ン ト とプレデク リ メ ン<br />
ト)<br />
(ページ 5-97) ス カ ラ すべて<br />
5-6 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
表 5-2 NEON と VFP に 共 通 の 命 令 の 参 照 ページ ( 続 き)<br />
ニーモニ ッ ク 概 要 ページ 演 算<br />
アーキテ<br />
クチャ<br />
VMOV<br />
1 本 の <strong>ARM</strong> ® レ ジ ス タ か ら 半 本 分 のダブルワー ド レ<br />
ジスタへの 転 送<br />
2 本 の <strong>ARM</strong> レジスタから 1 本 のダブルワード レジ<br />
スタへの 転 送<br />
半 本 分 のダブルワー ド レ ジ ス タ か ら 1 本 の <strong>ARM</strong> レ<br />
ジスタへの 転 送<br />
1 本 のダブルワード レジス タから 2 本 の <strong>ARM</strong> レジ<br />
スタへの 転 送<br />
(ページ 5-30) ス カ ラ すべて<br />
(ページ 5-29) スカラ VFPv2<br />
(ページ 5-30) ス カ ラ すべて<br />
(ページ 5-29) スカラ VFPv2<br />
単 精 度 か ら <strong>ARM</strong> レ ジ ス タへの 転 送 (ページ 5-31) ス カ ラ すべて<br />
<strong>ARM</strong> レ ジ ス タ か ら 単 精 度 への 転 送 (ページ 5-31) ス カ ラ すべて<br />
VMRS<br />
VMSR<br />
NEON / VFP システムレジスタから <strong>ARM</strong> レジスタ<br />
への 転 送<br />
<strong>ARM</strong> レジスタから NEON/VFP システムレジスタへ<br />
の 転 送<br />
(ページ 5-32) - すべて<br />
(ページ 5-32) - すべて<br />
VSTM 多 重 ス ト ア (ページ 5-27) - すべて<br />
VSTR ス ト ア (ページ 5-25) ス カ ラ すべて<br />
ストア (ポストインクリメントとプレデクリメン<br />
ト)<br />
(ページ 5-97) ス カ ラ すべて<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-7<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.1.3 VFP 命 令<br />
表 5-3 に NEON で 使 用 でき ない VFP 命 令 の 概 要 を 示 し ます。<br />
表 5-3 VFP 命 令 の 参 照 ページ<br />
ニーモニ ッ ク 概 要 ページ 演 算<br />
アーキテ<br />
クチャ<br />
VABS 絶 対 値 (ページ 5-112) ベ ク タ すべて<br />
VADD 加 算 (ページ 5-113) ベ ク タ すべて<br />
VCMP 比 較 (ページ 5-116) ス カ ラ すべて<br />
VCVT 単 精 度 と 倍 精 度 間 の 変 換 (ページ 5-117) ス カ ラ すべて<br />
浮 動 小 数 点 と 整 数 間 の 変 換 (ページ 5-118) ス カ ラ すべて<br />
浮 動 小 数 点 と 固 定 小 数 点 間 の 変 換 (ページ 5-119) スカラ VFPv3<br />
VCVTB, VCVTT<br />
半 精 度 浮 動 小 数 点 数 と 単 精 度 浮 動 小 数 点 数 間 の 変<br />
換<br />
(ページ 5-121) ス カ ラ 半 精 度<br />
VDIV 除 算 (ページ 5-113) ベ ク タ すべて<br />
VMLA 積 和 (ページ 5-114) ベ ク タ すべて<br />
VMLS 乗 減 算 (ページ 5-114) ベ ク タ すべて<br />
VMOV<br />
単 精 度 ま たは 倍 精 度 レ ジ ス タへの 浮 動 小 数 点 定 数<br />
の 挿 入 ( 表 5-2 (ページ 5-6) も 参 照 )<br />
(ページ 5-122) スカラ VFPv3<br />
VMUL 乗 算 (ページ 5-114) ベ ク タ すべて<br />
VNEG 否 定 (ページ 5-112) ベ ク タ すべて<br />
VNMLA 否 定 乗 累 積 (ページ 5-114) ベ ク タ すべて<br />
VNMLS 否 定 乗 減 算 (ページ 5-114) ベ ク タ すべて<br />
VNMUL 否 定 乗 算 (ページ 5-114) ベ ク タ すべて<br />
VSQRT 平 方 根 (ページ 5-112) ベ ク タ すべて<br />
VSUB 減 算 (ページ 5-113) ベ ク タ すべて<br />
5-8 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.2 NEON と VFP 向 けのアーキテ クチャサポー ト<br />
NEON 拡 張 は、 <strong>ARM</strong>v7-A と <strong>ARM</strong>v7-R のアーキテクチャでのみオプシ ョ ン と<br />
し て 使 用 で き ます。 NEON をサポー ト し てい る シ ス テムでは、 半 精 度 命 令 を<br />
除 くすべての NEON 命 令 を 使 用 で き ます。 命 令 の 中 には、 NEON なしの VFP<br />
拡 張 を 実 装 し たシ ス テムで 使 用 で き る も の も あ り ます。 こ れら は 「 共 通 の 命<br />
令 」 と 呼 ばれます。<br />
半 精 度 命 令 を 使 用 で き る のは、 半 精 度 拡 張 を 実 装 し た NEON システムまたは<br />
VFPv3 システムだけです (「 半 精 度 拡 張 」 を 参 照 )。<br />
大 半 の VFP 命 令 および 共 通 の 命 令 は、 VFP アーキテクチャのすべてのバー<br />
ジョンで 使 用 できます。 これが 当 てはま ら ない 場 合 には、 該 当 する VFP アー<br />
キテ クチャのバージ ョ ンを 命 令 の 説 明 文 中 に 記 述 し てあ り ます。<br />
<strong>ARM</strong>v7-M は、 VFP をサポート していません。 その 他 の <strong>ARM</strong>v7 アーキテク<br />
チャはすべて、 VFPv3 アーキテクチャをサポー ト しています。<br />
VFPv3 には、 VFPv3 レ ジ ス タ と 浮 動 小 数 点 データ 型 を 必 ずし もすべてサポー<br />
トしているわけではないバリアントがいくつかあります。 実 装 済 みの VFP<br />
アーキテ ク チャ と バ リ アン ト の 詳 細 については、 該 当 する 製 品 のマニ ュ アル<br />
を 必 ず 参 照 し て 下 さ い。<br />
NEON 命 令 と VFP 命 令 は、 半 精 度 命 令 も 含 めて、 必 要 なアーキテ ク チ ャ 拡 張<br />
をサポー ト し ていないシ ス テム 上 では 「 未 定 義 命 令 」 と し て 扱 われます。<br />
NEON 命 令 と VFP 命 令 をサポー ト し てい る シ ス テム 上 で も 、 必 要 な コ プ ロ<br />
セッサがコプロセッサアクセスコント ロールレジスタ (CP15 CPACR) で 有 効<br />
に されていない 場 合 には、 これら の 命 令 は、 未 定 義 と な り ます。 詳 細 につい<br />
ては、 お 使 いのプロセッサのテクニカル リ フ ァ レンスマニュアルを 参 照 して<br />
下 さい。<br />
5.2.1 半 精 度 拡 張<br />
半 精 度 拡 張 はオプシ ョ ンのアーキテ ク チャ であ り 、 VFPv3 と NEON の 両 アー<br />
キテ ク チ ャ を 拡 張 し ます。 単 精 度 (32 ビ ッ ト ) 浮 動 小 数 点 数 と 半 精 度 (16<br />
ビ ッ ト ) 浮 動 小 数 点 数 と の 間 で 変 換 を 行 う VFP 命 令 と NEON 命 令 を 使 用 でき<br />
ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-9<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.3 拡 張 レジス タバン ク<br />
NEON と VFP は 同 じ 拡 張 レジス タバン ク を 使 用 し ます。 この 点 が、 <strong>ARM</strong> レジ<br />
ス タバン ク と は 対 照 的 です。<br />
VFP コプロセッサには 32 本 の 単 精 度 レ ジ ス タ があ り 、 各 レ ジ ス タは 単 精 度 浮<br />
動 小 数 点 値 ま たは 32 ビット 整 数 のいずれかを 保 持 できます。<br />
これら 32 本 のレジス タは、 16 本 の 倍 精 度 レジス タ と し て も 使 用 されます。 た<br />
だし、 VFPv3 バリアントの 中 には、 さらに 16 本 の 倍 精 度 レ ジ ス タ を VFP レ<br />
ジ ス タ セ ッ ト に 追 加 する も の も あ り ます。 これらのレジスタは、 いずれの 単<br />
精 度 VFP レジスタと も 重 複 しません。<br />
以 下 のセ ク シ ョ ンで 説 明 する よ う に、 拡 張 レ ジ ス タバン ク は、 明 示 的 にエ イ<br />
リアスされた 3 つのビ ューを 使 用 し て 参 照 で き ます。<br />
図 5-1 (ページ 5-12) は、 拡 張 レジ ス タバン ク の 3 つのビ ューであ る ワード、<br />
ダブルワード、 およびク ワ ッ ド ワードの 各 レジスタを 示 し、 それらが 重 複 す<br />
る 様 子 を 示 しています。<br />
注<br />
使 用 する プ ロ セ ッ サに NEON と VFP の 両 方 があ る 場 合 、すべての NEON レジ<br />
スタが VFP レジスタ と 重 複 します。<br />
以 下 の よ う に 使 用 で き ます。<br />
• 一 部 のレ ジ ス タ を 単 精 度 値 用 に 使 用 し なが ら、 同 時 に 他 のレ ジ ス タ を 倍<br />
精 度 値 用 および、 NEON ベクタ 用 に 使 用 する。<br />
• 別 々の タ イ ミ ングで、 単 精 度 値 と 倍 精 度 値 に 同 じ レ ジ ス タ を 使 用 する。<br />
対 応 する 単 精 度 レ ジ ス タ と 倍 精 度 レ ジ ス タ を 同 時 に 使 用 し ないで 下 さ い。 レ<br />
ジ ス タ が 破 損 する こ と はあ り ませんが、 有 意 な 結 果 が 得 ら れな く な り ます。<br />
5.3.1 レジスタバンクの NEON ビュー<br />
NEON で 表 示 さ れる 拡 張 レ ジ ス タバン ク は 以 下 の と お り です。<br />
• 16 本 の 128 ビッ ト クワッドワードレジスタ、Q0-Q15。<br />
• 32 本 の 64 ビッ トダブルワードレジスタ、D0-D31。<br />
• 上 記 のビ ューのレ ジ ス タ を 組 み 合 わせた も の。<br />
5-10 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
NEON ビューには、 それぞれのレジスタにサイズとタイプがすべて 同 じ 1、<br />
2、 4、 8、 または 16 要 素 のベクタが 含 まれています。 各 要 素 はスカラとしても<br />
アクセスできます。<br />
5.3.2 拡 張 レ ジス タ バン クの VFP ビュー<br />
VFPv3 と VFPv3_fp16 におけ る 拡 張 レ ジ ス タバン ク のビ ューは 以 下 の と お り で<br />
す。<br />
• 32 本 の 64 ビットダブルワードレジスタ、D0-D31。<br />
• 32 本 の 32 ビットシングルワードレジスタ、S0-S31。 このビューではレジ<br />
スタバンクの 半 分 のみにアクセスできます。<br />
• 上 記 のビ ューのレ ジ ス タ を 組 み 合 わせた も の。<br />
VFPv2、 VFPv3-D16、 および VFPv3-D16_fp16 におけ る 拡 張 レジス タバン ク の<br />
ビューは 以 下 のとおりです。<br />
• 16 本 の 64 ビットダブルワードレジスタ、D0-D15。<br />
• 32 本 の 32 ビットシングルワードレジスタ、S0-S31。<br />
• 上 記 のビ ューのレ ジ ス タ を 組 み 合 わせた も の。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-11<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
S0<br />
S1<br />
S2<br />
S3<br />
S4<br />
S5<br />
S6<br />
S7<br />
D0<br />
D1<br />
D2<br />
D3<br />
Q0<br />
Q1<br />
...<br />
...<br />
...<br />
S28<br />
S29<br />
S30<br />
S31<br />
D14<br />
D15<br />
Q7<br />
D16<br />
D17<br />
Q8<br />
...<br />
...<br />
D30<br />
D31<br />
Q15<br />
レ ジ ス タ 間 のマ ッ ピ ン グは 以 下 の と お り です。<br />
• S は D の 最 下 位 ハーフにマ ッ プ さ れます。<br />
• S は D の 最 上 位 ハーフにマ ッ プ さ れます。<br />
• D は Q の 最 下 位 ハーフにマ ッ プ さ れます。<br />
• D は Q の 最 上 位 ハーフにマ ッ プ さ れます。<br />
図 5-1 拡 張 レジス タバン ク<br />
例 えば、 Q6 のベク タの 要 素 の 最 下 位 ハーフにア ク セスするには D12 を 参 照 し、<br />
要 素 の 最 上 位 ハーフにア ク セスする には D13 を 参 照 します。<br />
5-12 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.4 条 件 コー ド<br />
<strong>ARM</strong> 状 態 では、 条 件 コー ド を 使 用 し て VFP 命 令 の 実 行 を 制 御 で き ます。 この<br />
命 令 は、 他 のほぼすべての <strong>ARM</strong> 命 令 と 全 く 同 じ 方 法 で、 APSR 内 のステータ<br />
ス フ ラ グの 値 に 基 づいて 条 件 実 行 さ れます。<br />
<strong>ARM</strong> 状 態 では、 VFP と NEON の 両 方 に 共 通 の 命 令 を 除 き、 条 件 コード を 使<br />
用 して NEON 命 令 の 実 行 を 制 御 する こ と はで き ません。<br />
Thumb-2 プロセッサの Thumb ® 状 態 では、 IT 命 令 を 使 用 して 次 の NEON また<br />
は VFP 命 令 の 最 大 4 つまで 条 件 コード を 設 定 できます。 詳 細 については、<br />
「IT」 (ページ 4-127) を 参 照 して 下 さい。<br />
ス テータ ス フ ラ グ を 更 新 する と き に 使 用 で き る VFP 命 令 は VCMP のみです。<br />
APSR のフ ラ グ を 直 接 更 新 するのではな く 、 FPSCR の 別 のフ ラ グセ ッ ト を 更<br />
新 します (「FPSCR : 浮 動 小 数 点 ス テータ ス / 制 御 レ ジ ス タ」 (ページ 5-104)<br />
を 参 照 )。<br />
注<br />
こ れら のフ ラ グ を 使 用 し て、 条 件 付 き VFP 命 令 な どの 条 件 命 令 を 制 御 する に<br />
は、 まず VMRS 命 令 を 使 用 し て APSR にこれらのフラグをコピーする 必 要 があ<br />
ります (「VMRS および VMSR」 (ページ 5-32) を 参 照 )。<br />
VCMP 命 令 実 行 後 のフ ラ グは、 <strong>ARM</strong> データ 処 理 命 令 実 行 後 のフ ラ グ と 意 味 が 厳<br />
密 には 異 な り ます。 その 理 由 は 以 下 の と お り です。<br />
• 浮 動 小 数 点 値 が 符 号 な し にな る こ と はないので、 符 号 な し 条 件 は 不 要 で<br />
す。<br />
• Not-a-Number (NaN) 値 には 数 値 間 ま たは 相 互 の 順 位 関 係 がないので、<br />
不 規 則 な 順 位 の 結 果 を 説 明 する ための 条 件 を 追 加 する 必 要 があ り ます。<br />
条 件 コー ド ニーモニ ッ ク の 意 味 については、 表 5-4 (ページ 5-14) を 参 照 し<br />
て 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-13<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
ニーモニッ<br />
ク<br />
<strong>ARM</strong> デー タ 処 理 命 令 後 の 意 味<br />
VFP VCMP 命 令 後 の 意 味<br />
表 5-4 条 件 コー ド<br />
EQ 等 しい 等 しい<br />
NE 等 し く ない 等 し く ない、 ま たは 順 番 がない<br />
CS or HS キ ャ リ ー 設 定 ま たは 大 き いか 等 し い ( 符 号 な し) 大 き いか 等 し い、 ま たは 順 番 がない<br />
CC or LO キ ャ リ ー ク リ ア ま たは 小 さ い ( 符 号 な し) 小 さ い<br />
MI 否 定 小 さ い<br />
PL 正 または 0 大 きいか 等 しい、 または 順 番 がない<br />
VS オーバーフ ロー 順 番 がない (NaN オペラ ン ド が 含 まれ<br />
ている)<br />
VC オーバーフ ローな し 順 番 があ る<br />
HI 大 き い ( 符 号 な し) 大 き い、 ま たは 順 番 がない<br />
LS 小 さ いか 等 し い ( 符 号 な し) 小 さ いか 等 し い<br />
GE 大 き いか 等 し い ( 符 号 付 き) 大 き いか 等 し い<br />
LT 小 さ い ( 符 号 付 き) 小 さ い、 ま たは 順 番 がない<br />
GT 大 き い ( 符 号 付 き) 大 き い<br />
LE 小 さ いか 等 し い ( 符 号 付 き) 小 さ いか 等 し い、 ま たは 順 番 がない<br />
AL 常 時 ( 通 常 省 略 ) 常 時 ( 通 常 省 略 )<br />
注<br />
APSR のフ ラ グ を 最 後 に 更 新 し た 命 令 の タ イ プに よ って 条 件 コー ド の 意 味 が<br />
決 ま り ます。<br />
5-14 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.5 一 般 的 な 情 報<br />
こ のセ ク シ ョ ンでは、 説 明 が 重 複 する のを 避 け る ため、 多 く の 命 令 に 共 通 す<br />
る 情 報 を 示 します。 こ のセ ク シ ョ ンは 以 下 のサブセ ク シ ョ ンか ら 構 成 さ れて<br />
います。<br />
• 「 浮 動 小 数 点 の 例 外 」<br />
• 「NEON データ 型 および VFP データ 型 」 (ページ 5-16)<br />
• 「NEON の Normal、 Long、 Wide、 Narrow、 およびサチュ レー ト 命 令 」<br />
(ページ 5-17)<br />
• 「NEON スカラ」 (ページ 5-20)<br />
• 「 拡 張 表 記 」 (ページ 5-20)<br />
• 「{0,1} を 超 え る 多 項 式 算 術 演 算 」 (ページ 5-22)<br />
• 「VFP コプロセッサ」 (ページ 5-23)<br />
5.5.1 浮 動 小 数 点 の 例 外<br />
浮 動 小 数 点 の 例 外 が 発 生 する 命 令 の 説 明 には、 例 外 と い う サブセ ク シ ョ ンが<br />
あります。 命 令 の 説 明 に 「 浮 動 小 数 点 例 外 」 サブセ ク シ ョ ンがない 場 合 は、<br />
その 命 令 に よ って 浮 動 小 数 点 例 外 が 発 生 する こ と はあ り ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-15<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.5.2 NEON データ 型 および VFP データ 型<br />
NEON 命 令 と VFP 命 令 のデータ 型 指 定 子 は、 データ 型 を 示 す 文 字 の 後 に、 一<br />
般 に 幅 を 示 す 数 値 が 続 き ます。 指 定 子 と 命 令 ニーモニ ッ ク はポ イ ン ト で 区 切<br />
られます。 表 5-5 は NEON 命 令 で 使 用 で き るデータ 型 を 示 し ています。 表 5-6<br />
は VFP 命 令 で 使 用 で き るデータ 型 を 示 し ています。<br />
表 5-5 NEON データ 型<br />
8 ビット 16 ビット 32 ビット 64 ビット<br />
符 号 な し 整 数 U8 U16 U32 U64<br />
符 号 付 き 整 数 S8 S16 S32 S64<br />
型 が 指 定 されていない 整<br />
数<br />
I8 I16 I32 I64<br />
浮 動 小 数 点 数 使 用 不 可 F16 F32 (また<br />
は F)<br />
使 用 不 可<br />
{0,1} を 超 え る 多 項 式 P8 P16 使 用 不 可 使 用 不 可<br />
表 5-6 VFP データ 型<br />
16 ビット 32 ビット 64 ビット<br />
符 号 な し 整 数 U16 U32 使 用 不 可<br />
符 号 付 き 整 数 S16 S32 使 用 不 可<br />
浮 動 小 数 点 数 F16 F32 (また<br />
は F)<br />
F64 (また<br />
は D)<br />
{0,1} を 超 え る 多 項 式 演 算 に 関 する 詳 細 については、 「{0,1} を 超 え る 多 項 式 算<br />
術 演 算 」 (ページ 5-22) を 参 照 して 下 さい。<br />
2 番 目 (ま たは 唯 一 ) のオペラ ン ド のデータ 型 は 命 令 で 指 定 さ れます。<br />
注<br />
• ほ と んどの 命 令 では 使 用 可 能 なデータ 型 の 範 囲 が 制 限 さ れています。 詳<br />
細 については、 命 令 のページを 参 照 し て 下 さい。 ただし、 データ 型 につ<br />
いては 以 下 のよ う に 柔 軟 に 記 述 し てあ り ます。<br />
— 記 述 で I が 指 定 されている 場 合 、データ 型 と し て S または U も 使 用<br />
できます。<br />
5-16 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
— データサ イ ズだけが 指 定 さ れてい る 場 合 には、 型 (I、 S、 U、 P、<br />
または F) を 指 定 できます。<br />
— データ 型 が 指 定 さ れていない 場 合 、 データ 型 を 指 定 で き ます。<br />
• F16 データ 型 を 使 用 で き る のは、 半 精 度 アーキテ ク チャ 拡 張 を 実 装 し た<br />
システムだけです。<br />
5.5.3 NEON の Normal、 Long、 Wide、 Narrow、 およびサチュレート 命 令<br />
多 くの NEON データ 処 理 命 令 は、 Normal、 Long、 Wide、 Narrow、 およびサ<br />
チュレートバリ アン トで 使 用 できます。<br />
NEON 命 令 を 実 行 でき る 対 象 は 以 下 のとおり です。<br />
• ダブルワー ド ベ ク タ の 構 成 要 素<br />
— 8 つの 8 ビッ ト 要 素<br />
— 4 つの 16 ビッ ト 要 素<br />
— 2 つの 32 ビッ ト 要 素<br />
— 1 つの 64 ビッ ト 要 素<br />
• ク ワ ッ ド ワー ド ベ ク タ の 構 成 要 素<br />
— 16 の 8 ビット 要 素<br />
— 8 つの 16 ビッ ト 要 素<br />
— 4 つの 32 ビッ ト 要 素<br />
— 2 つの 64 ビッ ト 要 素<br />
Normal 命 令<br />
Normal 命 令 は こ れら のベ ク タ 型 に 対 し て 演 算 を 実 行 し、 オペラ ン ド ベ ク タ と<br />
同 じ サ イ ズで、 通 常 は 型 も 同 じ 結 果 ベ ク タ を 生 成 し ます。<br />
命 令 ニーモニ ッ ク に Q を 追 加 する こ と に よ り 、 オペラ ン ド 、 および Normal 命<br />
令 の 結 果 をすべてク ワ ッ ド ワードにする よ う に 指 定 できます。 これによ り、<br />
オペラ ン ド または 結 果 がク ワ ッ ド ワード でない 場 合 は、 アセンブラでエラー<br />
が 生 成 されます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-17<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
Long 命 令<br />
Long 命 令 は、 ダブルワー ド ベ ク タ オペラ ン ド に 対 し て 演 算 を 実 行 し、 ク ワ ッ<br />
ド ワー ド ベ ク タ 結 果 を 生 成 し ます。 結 果 の 要 素 の 幅 は、 通 常 、 オペラ ン ド の<br />
要 素 の 幅 の 2 倍 にな り 、 型 は 同 じです。<br />
Long 命 令 は、 命 令 ニーモニ ッ ク に L を 追 加 して 指 定 し ます。<br />
Wide 命 令<br />
Wide 命 令 は、 それぞれ 1 つのダブルワー ドベク タオペラ ン ド と ク ワ ッ ド ワー<br />
ドベク タオペラン ドに 対 して 演 算 を 実 行 し ます。 クワッドワードベクタ 結 果<br />
が 生 成 されます。 結 果 の 要 素 と 第 1 オペラ ン ド の 幅 は 第 2 オペ ラ ン ド の 要 素 の<br />
幅 の 2 倍 です。<br />
Wide 命 令 は、 命 令 ニーモニ ッ ク に W を 追 加 して 指 定 します。<br />
Narrow 命 令<br />
Narrow 命 令 は、 ク ワ ッ ド ワー ド ベ ク タ オペラ ン ド に 対 し て 演 算 を 実 行 し、 ダ<br />
ブルワードベク タ 結 果 を 生 成 し ます。 結 果 の 要 素 の 幅 は、 通 常 、 オペラ ン ド<br />
の 要 素 の 幅 の 半 分 です。<br />
Narrow 命 令 は、 命 令 ニーモニ ッ ク に N を 追 加 して 指 定 し ます。<br />
5-18 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
サチュレー ト 命 令<br />
サチュ レー ト 命 令 の 機 能 の 概 要 については、 「サチュ レー ト 命 令 」 (ページ<br />
4-100) を 参 照 して 下 さい。 NEON サチュ レー ト 命 令 がサチュ レー ト する 範 囲<br />
については、 表 5-7 を 参 照 して 下 さい。<br />
サチュ レー ト 命 令 は、 Q と 命 令 ニーモニ ッ ク の 間 に 接 頭 文 字 V を 使 用 して 指 定<br />
します。<br />
表 5-7 NEON サチ ュ レーシ ョ ンの 範 囲<br />
データ 型<br />
x のサチ ュ レーシ ョ ン<br />
範 囲<br />
S8 –2 7
NEON と VFP プログラ ミング<br />
5.5.4 NEON スカラ<br />
一 部 の NEON 命 令 はベク タ と 組 み 合 わせて ス カ ラ に 対 し て 実 行 さ れます。<br />
NEON スカラは 8 ビッ ト、16 ビッ ト、32 ビッ ト、 または 64 ビッ トです。 乗 算<br />
命 令 と は 違 って、 ス カ ラ にア ク セスする 命 令 はレ ジ ス タバン ク 内 の 要 素 にア<br />
クセスできます。 命 令 構 文 はダブルワードベクタにインデクスを 使 用 してス<br />
カラを 参 照 するので、Dm[x] は Dm の x 番 目 の 要 素 にな り ます。<br />
乗 算 命 令 では 16 ビッ トまたは 32 ビ ッ ト スカラのみを 使 用 でき、 レジス タバ<br />
ン ク でア ク セ スで き る のは 最 初 の 32 ビットスカラだけです。 つま り、 乗 算 命<br />
令 では 以 下 のよ う にな り ます。<br />
• 16 ビットスカラはレジスタ D0 ~ D7 に 制 限 されます (x の 範 囲 は 0 ~<br />
3)。<br />
• 32 ビットスカラはレジスタ D0 ~ D15 に 制 限 されます(x は 0 または 1)。<br />
5.5.5 拡 張 表 記<br />
アセンブラは、 アーキテクチャ 上 の NEON / VFP アセンブ リ 構 文 に 拡 張 表 記<br />
とい う 拡 張 を 実 装 します。 こ の 拡 張 に よ り 、 レ ジ ス タ 名 にデータ 型 情 報 ま た<br />
はスカラインデクスを 含 めることができるようになります。 これを 行 う と、<br />
すべての 命 令 にデータ 型 情 報 やス カ ラ イ ンデク ス を 含 め る 必 要 がな く な り ま<br />
す。<br />
レ ジ ス タ 名 は 以 下 のいずれかにな り ます。<br />
型 なし<br />
レジス タ 名 ではレジス タは 指 定 されますが、 それに 含 まれる<br />
データ 型 、 レジスタ 内 の 特 定 のスカラのインデクスは 指 定 され<br />
ません。<br />
型 なし、 スカ ラ イ ンデク ス 付 き<br />
レジス タ 名 ではレジス タは 指 定 されますが、 それに 含 まれる<br />
データ 型 は 指 定 されません。 さ らに、 レジスタ 内 の 特 定 のスカ<br />
ラのインデクスが 指 定 されます。<br />
型 付 き<br />
レジスタ 名 ではレジスタ、 およびそれに 含 まれるデータ 型 は 指<br />
定 されますが、 レジス タ 内 の 特 定 のス カ ラのイ ンデク スは 指 定<br />
されません。<br />
型 付 き、 ス カ ラ イ ンデ ク ス 付 き<br />
レジスタ 名 ではレジスタ、 およびそれに 含 まれるデータ 型 は 指<br />
定 されますが、 レジス タ 内 の 特 定 のス カ ラのイ ンデク スは 指 定<br />
されません。<br />
5-20 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
型 付 きレジスタおよびスカラレジスタを 作 成 するには、SN ディレクティブ、<br />
DN ディレクティブ、 および QN デ ィ レ ク テ ィ ブを 使 用 する 必 要 があ り ます。 詳<br />
細 については、 「QN、 DN、 および SN」 (ページ 7-16) を 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-21<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.5.6 {0,1} を 超 える 多 項 式 算 術 演 算<br />
係 数 0 と 1 は 以 下 のブール 算 術 演 算 規 則 を 使 用 し て 操 作 し ます。<br />
• 0 + 0 = 1 + 1 = 0<br />
• 0 + 1 = 1 + 0 = 1<br />
• 0 * 0 = 0 * 1 = 1 * 0 = 0<br />
• 1 * 1 = 1<br />
つま り、 {0,1} を 超 える 2 つの 多 項 式 を 加 算 する と ビ ッ ト 単 位 排 他 的 論 理 和<br />
(XOR) と 同 じになり、 {0,1} を 超 える 2 つの 多 項 式 を 乗 算 する と、 整 数 の 乗<br />
算 と 同 じ にな り ます。 ただ し 一 部 の 積 は 加 算 ではな く 排 他 的 論 理 和 の 結 果 で<br />
す。<br />
5-22 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.5.7 VFP コプロセッサ<br />
VFP コプロセッサと、そのサポート コードを 使 用 するこ とによ り、ANSI/IEEE<br />
規 格 754-1985 「IEEE Standard for Binary Floating-Point Arithmetic ( 二 進 浮 動 小<br />
数 点 演 算 に 関 する IEEE 規 格 )」 で 定 義 さ れてい る よ う に、 単 精 度 および 倍 精<br />
度 の 浮 動 小 数 点 演 算 を 実 行 で き ます。 本 章 では、 こ れを 「IEEE 754 標 準 」 と<br />
呼 びます。 詳 細 については、 『ライブラ リガイ ド』 の 第 4 章 浮 動 小 数 点 サポー<br />
ト を 参 照 して 下 さい。<br />
最 大 8 個 の 単 精 度 数 値 ま たは 最 大 4 個 の 倍 精 度 数 値 か ら な る シ ョ ー ト ベ ク タ<br />
を 使 用 でき ますが、 これは 廃 止 されています。 詳 細 については、 「VFP ベクタ<br />
モード」 (ページ 5-123) を 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-23<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.6 NEON と VFP に 共 通 の 命 令<br />
こ のセ ク シ ョ ンは 以 下 のサブセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「VLDR および VSTR」 (ページ 5-25)<br />
拡 張 レ ジ ス タ ロー ド と ス ト ア。<br />
• 「VLDM、 VSTM、 VPOP、 VPUSH」 (ページ 5-27)<br />
拡 張 レ ジ ス タ 多 重 ロー ド と ス ト ア。<br />
• 「VMOV (2 本 の <strong>ARM</strong> レジスタ と 拡 張 レジスタ 間 )」 (ページ 5-29)<br />
2 本 の <strong>ARM</strong> レジスタと 64 ビ ッ ト 拡 張 レジスタ との 間 で 内 容 を 転 送 しま<br />
す。<br />
• 「VMOV (<strong>ARM</strong> レジスタと NEON ス カ ラ の 間 )」 (ページ 5-30)<br />
<strong>ARM</strong> レジスタと 半 分 の 64 ビッ ト 拡 張 レジスタとの 間 で 内 容 を 転 送 しま<br />
す。<br />
• 「VMOV (1 本 の <strong>ARM</strong> レ ジ ス タ と 単 精 度 VFP の 間 )」 (ページ 5-31)<br />
32 ビット 拡 張 レジスタと <strong>ARM</strong> レジスタ との 間 で 内 容 を 転 送 します。<br />
• 「VMRS および VMSR」 (ページ 5-32)<br />
<strong>ARM</strong> レジスタと NEON/VFP システムレジスタとの 間 で 内 容 を 転 送 しま<br />
す。<br />
5-24 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.6.1 VLDR および VSTR<br />
拡 張 レ ジ ス タ ロー ド と ス ト ア。<br />
構 文<br />
VLDR{cond}{.size} Fd, [Rn{, #offset}]<br />
VSTR{cond}{.size} Fd, [Rn{, #offset}]<br />
VLDR{cond}{.size} Fd, label<br />
VSTR{cond}{.size} Fd, label<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
size<br />
Fd<br />
Rn<br />
offset<br />
label<br />
任 意 に 指 定 で き るデータ サ イ ズ 指 定 子 です。 Fd が 単 精 度 VFP レ<br />
ジスタの 場 合 は 32、 それ 以 外 の 場 合 は 64 にします。<br />
ロー ド ま たは 保 存 する 拡 張 レ ジ ス タ を 指 定 し ます。 NEON 命 令 の<br />
場 合 は、 D レジスタである 必 要 があり ます。 VFP 命 令 の 場 合 は、<br />
D または S レジスタを 指 定 できます。<br />
転 送 用 のベース ア ド レ ス を 保 持 する <strong>ARM</strong> レジスタを 指 定 しま<br />
す。<br />
任 意 の 数 値 式 を 指 定 し ます。 アセンブ リ 時 に 数 値 定 数 が 求 められ<br />
る 必 要 があ り ます。 値 は 4 の 倍 数 で、 範 囲 は –1020 ~ +1020 です。<br />
値 はベース ア ド レ スに 加 算 さ れ、 転 送 に 使 用 する ア ド レ ス を 形<br />
成 します。<br />
プログラム 相 対 式 を 指 定 します。 詳 細 については、 「レジスタ 相<br />
対 式 と プ ロ グ ラ ム 相 対 式 」 (ページ 3-39) を 参 照 して 下 さい。<br />
label は 現 在 の 命 令 か ら 1KB 以 内 に 配 置 する 必 要 があ り ます。<br />
使 用 法<br />
VLDR 命 令 は、 メ モ リ か ら 拡 張 レ ジ ス タ を ロー ド し ます。 VSTR 命 令 は、 拡 張 レ ジ<br />
スタの 内 容 をメモリに 保 存 します。<br />
Fd が 単 精 度 レジス タの 場 合 は、 1 ワードが 転 送 されます (VFP のみ)。 それ 以<br />
外 の 場 合 は 2 ワードが 転 送 されます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-25<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
VLDR 疑 似 命 令 も あ り ます (「VLDR 疑 似 命 令 」 (ページ 5-96) を 参 照 )。<br />
5-26 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.6.2 VLDM、 VSTM、 VPOP、 VPUSH<br />
拡 張 レ ジ ス タ 多 重 ロー ド 、 多 重 ス ト ア、 ス タ ッ ク か ら のポ ッ プ、 ス タ ッ ク へ<br />
のプッ シュ。<br />
構 文<br />
VLDMmode{cond} Rn{!}, Registers<br />
VSTMmode{cond} Rn{!}, Registers<br />
VPOP{cond} Registers<br />
VPUSH{cond} Registers<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
mode<br />
以 下 のいずれかを 指 定 し ます。<br />
IA<br />
DB<br />
EA<br />
各 転 送 後 にア ド レ ス を イ ン ク リ メ ン ト し ます。 IA がデ<br />
フォルトで、 省 略 できます。<br />
各 転 送 前 にア ド レ ス をデ ク リ メ ン ト し ます。<br />
空 上 昇 ス タ ッ ク 演 算 を 意 味 します。 ロードの 場 合 には<br />
DB、 保 存 の 場 合 には IA と 同 じです。<br />
FD フル 下 降 ス タ ッ ク 演 算 を 意 味 し ます。 ロー ド の 場 合 に<br />
は IA、 保 存 の 場 合 には DB と 同 じです。<br />
同 等 のア ド レ ッ シングモード 接 尾 文 字 については、 表 2-9 (ペー<br />
ジ 2-46) を 参 照 して 下 さい。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
Rn<br />
転 送 用 のベース ア ド レ ス を 保 持 する <strong>ARM</strong> レジスタを 指 定 しま<br />
す。<br />
! これはオプショ ンです。! は、 更 新 されたベースア ド レ ス を Rn に<br />
ラ イ ト バ ッ ク する 必 要 があ る こ と を 示 し ます。 ! が 指 定 されてい<br />
ない 場 合 、 mode は IA にな り ます。<br />
Registers<br />
連 続 する 拡 張 レ ジ ス タ の リ ス ト を 中 括 弧 { および } で 囲 んで 指 定<br />
します。 リ ス ト はカ ンマで 区 切 って 指 定 する こ と も、 範 囲 を 指 定<br />
するこ と もできます。 リストには 少 なくとも 1 本 のレジス タ を 指<br />
定 する 必 要 があ り ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-27<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
S、 D、 または Q レジス タ を 指 定 でき ますが、 混 在 させないで 下 さ<br />
い。 レジスタの 数 は D レジスタは 16 本 、 Q レジスタは 8 本 を 超 え<br />
ないよ う にして 下 さい。 Q レジスタが 指 定 されている 場 合 は、 逆<br />
アセンブ リ で D レジスタと して 表 示 されます。<br />
注<br />
VPOP Registers は、 VLDM sp!, Registers と 同 じ 意 味 です。<br />
VPUSH Registers は、 VSTMDB sp!, Registers と 同 じ 意 味 です。<br />
どちらの 形 式 も 使 用 できます。 VPOP および VPUSH に 逆 アセンブルされます。<br />
5-28 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.6.3 VMOV (2 本 の <strong>ARM</strong> レジスタと 拡 張 レジスタ 間 )<br />
2 本 の <strong>ARM</strong> レジスタ と 64 ビット 拡 張 レジスタ 間 、 または 2 本 の 連 続 する 32<br />
ビッ ト VFP レジスタ 間 で 内 容 を 転 送 します。<br />
構 文<br />
VMOV{cond} Dm, Rd, Rn<br />
VMOV{cond} Rd, Rn, Dm<br />
VMOV{cond} Sm, Sm1, Rd, Rn<br />
VMOV{cond} Rd, Rn, Sm, Sm1<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
Dm 64 ビ ッ ト 拡 張 レ ジ ス タ を 指 定 し ます。<br />
Sm<br />
Sm1<br />
VFP 32 ビットレジスタを 指 定 します。<br />
Sm の 後 続 の VFP 32 ビッ トレジスタを 指 定 します。<br />
Rd, Rn <strong>ARM</strong> レジスタです。 r15 は 使 用 し ないで 下 さ い。<br />
使 用 法<br />
VMOV Dm, Rd, Rn は Rd の 内 容 を Dm の 下 位 半 分 に 転 送 し、Rn の 内 容 を Dm の 上 位 半<br />
分 に 転 送 し ます。<br />
VMOV Rd, Rn, Dm は Dm の 下 位 半 分 の 内 容 を Rd に 転 送 し、Dm の 上 位 半 分 の 内 容 を<br />
Rn に 転 送 し ます。<br />
VMOV Rd, Rn, Sm, Sm1 は、 Sm の 内 容 を Rd に、 Sm1 の 内 容 を Rn に 転 送 し ます。<br />
VMOV Sm, Sm1, Rd, Rn は、 Rd の 内 容 を Sm に、 Rn の 内 容 を Sm1 に 転 送 し ます。<br />
アーキテクチャ<br />
64 ビ ッ ト 命 令 は 以 下 の も ので 使 用 で き ます。<br />
• NEON<br />
• VFPv2 以 上 。<br />
2 x 32 ビッ ト 命 令 は、 VFPv2 および 上 記 で 使 用 で き ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-29<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.6.4 VMOV (<strong>ARM</strong> レジスタと NEON スカラの 間 )<br />
<strong>ARM</strong> レジスタと NEON ス カ ラ 間 で 内 容 を 転 送 し ます。<br />
構 文<br />
VMOV{cond}{.size} Dn[x], Rd<br />
VMOV{cond}{.datatype} Rd, Dn[x]<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
size データ サ イ ズ。 8、 16、 または 32 を 指 定 できます。 省 略 し た 場 合 、<br />
size は 32 にな り ます。 VFP 命 令 の 場 合 は、size は 32 であるか 省 略<br />
する 必 要 があ り ます。<br />
datatype<br />
Dn[x]<br />
Rd<br />
データ 型 。 U8、 S8、 U16、 S16、 または 32 を 指 定 できます。 省 略 し た<br />
場 合 、 datatype は 32 にな り ます。 VFP 命 令 の 場 合 は、 datatype は<br />
32 であ る か 省 略 する 必 要 があ り ます。<br />
NEON スカラを 指 定 します (「NEON スカラ」 (ページ 5-20) を<br />
参 照 )。<br />
<strong>ARM</strong> レジスタを 指 定 します。 Rd に r15 は 指 定 でき ません。<br />
使 用 法<br />
VMOV Rd, Dn[x] は Dn[x] の 内 容 を Rd の 最 下 位 バイ ト 、 ハーフ ワード、 または<br />
ワー ド に 転 送 し ます。 Rd の 残 り のビ ッ ト は、 ゼ ロ 拡 張 か 符 号 拡 張 のいずれか<br />
です。<br />
VMOV Dn[x], Rd は Rd の 最 下 位 バ イ ト 、 ハーフ ワー ド 、 ま たはワー ド を Sn に 転 送<br />
します。<br />
5-30 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.6.5 VMOV (1 本 の <strong>ARM</strong> レジスタと 単 精 度 VFP の 間 )<br />
単 精 度 浮 動 小 数 点 レ ジ ス タ と <strong>ARM</strong> レジスタ 間 で 内 容 を 転 送 します。<br />
構 文<br />
VMOV{cond} Rd, Sn<br />
VMOV{cond} Sn, Rd<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
Sn VFP 単 精 度 レ ジ ス タ を 指 定 し ます。<br />
Rd<br />
<strong>ARM</strong> レジスタを 指 定 します。 Rd に r15 は 指 定 でき ません。<br />
使 用 法<br />
VMOV Rd, Sn は Sn の 内 容 を Rd に 転 送 し ます。<br />
VMOV Sn, Rd は Rd の 内 容 を Sn に 転 送 し ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-31<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.6.6 VMRS および VMSR<br />
<strong>ARM</strong> レジスタと NEON/VFP システムレジスタとの 間 で 内 容 を 転 送 します。<br />
構 文<br />
VMRS{cond} Rd, extsysreg<br />
VMSR{cond} extsysreg, Rd<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
extsysreg<br />
Rd<br />
NEON / VFP システムレジスタを 指 定 します。 通 常 FPSCR、 FPSID、<br />
または FPEXC です (「NEON / VFP システムレジスタ」 (ページ<br />
5-104) を 参 照 )。<br />
<strong>ARM</strong> レジスタを 指 定 します。 Rd に r15 は 指 定 でき ません。<br />
extsysreg が FPSCR である 場 合 は、 APSR_nzcv を 指 定 できます。 この<br />
場 合 、 浮 動 小 数 点 ス テータ ス フ ラ グが <strong>ARM</strong> APSR の 対 応 する フ<br />
ラグに 転 送 されます。<br />
使 用 法<br />
VMRS 命 令 は extsysreg の 内 容 を Rd に 転 送 し ます。<br />
VMSR 命 令 は Rd の 内 容 を extsysreg に 転 送 し ます。<br />
注<br />
こ れら の 命 令 は、 現 在 の NEON 演 算 ま たは VFP 演 算 がすべて 完 了 する まで<br />
<strong>ARM</strong> を 停 止 させます。<br />
サンプル<br />
VMRS r2,FPCID<br />
VMRS APSR_nzcv, FPSCR ; transfer FP status register to <strong>ARM</strong> APSR<br />
VMSR FPSCR, r4<br />
5-32 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.7 NEON 論 理 演 算 と 比 較 演 算<br />
こ のセ ク シ ョ ンは 以 下 のサブセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「VAND、 VBIC、 VEOR、 VORN、 および VORR (レジスタ)」 (ページ<br />
5-34)<br />
ビ ッ ト 単 位 論 理 積 、 ビ ッ ト ク リ ア、 排 他 的 論 理 和 (XOR)、 否 定 論 理 和 、<br />
および 論 理 和 (レ ジ ス タ)<br />
• 「VBIC および VORR (イ ミディエート)」 (ページ 5-35)<br />
ビット 単 位 ビットクリアと 論 理 和 (イミディエート)<br />
• 「VBIF、 VBIT、 VBSL」 (ページ 5-37)<br />
False の 場 合 はビ ッ ト 単 位 挿 入 、 True の 場 合 はビ ッ ト 単 位 を 挿 入 、 およ<br />
び 選 択<br />
• 「VMOV、 VMVN (レジスタ)」 (ページ 5-38)<br />
データ 代 入 命 令 、 およびデータ の 各 ビ ッ ト を 反 転 させてか ら 代 入 する 命<br />
令<br />
• 「VACGE および VACGT」 (ページ 5-39)<br />
絶 対 値 の 比 較<br />
• 「VCEQ、 VCGE、 VCGT、 VCLE、 および VCLT」 (ページ 5-40)<br />
比 較<br />
• 「VTST」 (ページ 5-42)<br />
テス ト ビッ ト<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-33<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.7.1 VAND、 VBIC、 VEOR、 VORN、 および VORR (レジスタ)<br />
VAND (ビ ッ ト 単 位 論 理 積 )、 VBIC (ビ ッ ト ク リ ア)、 VEOR (ビ ッ ト 単 位 排 他 的 論<br />
理 和 )、 VORN (ビ ッ ト 単 位 否 定 論 理 和 )、 および VORR (ビ ッ ト 単 位 論 理 和 ) の<br />
各 命 令 は、 2 本 のレ ジ ス タ 間 でビ ッ ト 単 位 論 理 演 算 を 実 行 し て、 デス テ ィ<br />
ネーシ ョ ンレジス タに 結 果 を 返 し ます。<br />
構 文<br />
Vop{cond}.{datatype} {Qd}, Qn, Qm<br />
Vop{cond}.{datatype} {Dd}, Dn, Dm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
op<br />
以 下 のいずれかを 指 定 し ます。<br />
AND 論 理 積<br />
ORR 論 理 和<br />
EOR 排 他 的 論 理 和 (XOR)<br />
BIC 論 理 積 補 数<br />
ORN 論 理 和 補 数<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
任 意 に 指 定 で き るデータ 型 です。 アセンブラは datatype を 無 視 し<br />
ます。<br />
Qd, Qn, Qm ク ワ ッ ド ワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ン レ ジ ス タ、<br />
第 1 オペラ ン ド レジス タ、 第 2 オペラ ン ド レジス タ を 指 定 し ま<br />
す。<br />
Dd, Dn, Dm ダブルワード 演 算 で 使 用 するデステ ィ ネーシ ョ ンレジスタ、 第 1<br />
オペラ ン ド レジス タ、 第 2 オペラ ン ド レ ジ ス タ を 指 定 し ます。<br />
注<br />
両 方 のオペ ラ ン ド に 同 じ レ ジ ス タ を 使 用 する VORR は VMOV 命 令 です。 VORR はこ<br />
のよ うに 使 用 できますが、 結 果 として 生 じたコードを 逆 アセンブルすると、<br />
VMOV 構 文 が 生 成 さ れます。 詳 細 については、 「VMOV、 VMVN (レジスタ)」<br />
(ページ 5-38) を 参 照 して 下 さい。<br />
5-34 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.7.2 VBIC および VORR (イ ミディ エート)<br />
VBIC (ビットクリアイミディエート) はデスティネーションベクタの 各 要 素<br />
を 取 得 し、 即 値 を 使 用 し てビ ッ ト 単 位 論 理 積 補 数 を 求 め、 デス テ ィ ネーシ ョ<br />
ンベク タに 結 果 を 返 し ます。<br />
VORR (ビ ッ ト 単 位 論 理 和 イ ミ デ ィ エー ト ) は、 デス テ ィ ネーシ ョ ンベ ク タ の<br />
各 要 素 を 取 得 し、 即 値 を 使 用 し てビ ッ ト 単 位 論 理 和 を 実 行 し、 デス テ ィ ネー<br />
ションベクタに 結 果 を 返 します。<br />
疑 似 命 令 「VAND および VORN (イ ミディエート)」 (ページ 5-100) も 参 照 し<br />
て 下 さい。<br />
構 文<br />
Vop{cond}.datatype Qd, #imm<br />
Vop{cond}.datatype Dd, #imm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
op<br />
BIC または ORR を 指 定 します。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
Qd ??? Dd<br />
imm<br />
I8、 I16、 I32、 または I64 のいずれかを 指 定 し ます。<br />
ソースと 結 果 の NEON レジスタを 指 定 します。<br />
イミディエート 定 数 です。<br />
イミディエート 定 数<br />
imm をデステ ィ ネーシ ョ ンレジス タを 満 たすためにアセンブラが 繰 り 返 すパ<br />
ターン と し て 指 定 で き る か、 ま たは (パターンに 準 拠 する) 即 値 を 省 略 せず<br />
に 直 接 指 定 で き る かのいずれかです。 imm のパターンは、 datatype で 決 ま り ま<br />
す ( 表 5-8 を 参 照 )。<br />
表 5-8 即 値 のパタ ーン<br />
I16<br />
0x00XY<br />
I32<br />
0x000000XY<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-35<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
表 5-8 即 値 のパタ ーン ( 続 き)<br />
I16<br />
0xXY00<br />
I32<br />
0x0000XY00<br />
0x00XY0000<br />
0xXY000000<br />
I8 データ 型 ま たは I64 データ 型 を 使 用 する 場 合 、 アセンブ ラ は I16 命 令 か I32<br />
命 令 のいずれかに 変 換 し て、 imm のパ ターンに 一 致 さ せます。 即 値 が 表 5-8<br />
(ページ 5-35) に 示 し たパターンのいずれにも 一 致 し ない 場 合 、 アセンブラは<br />
エ ラーを 生 成 し ます。<br />
5-36 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.7.3 VBIF、 VBIT、 VBSL<br />
VBIT (True の 場 合 はビ ッ ト 単 位 を 挿 入 ) は、 第 2 オペラ ン ド の 対 応 する ビ ッ<br />
トが 1 の 場 合 は 第 1 オペラ ン ド からデステ ィ ネーシ ョ ンに 各 ビ ッ ト を 挿 入 し<br />
ます。 それ 以 外 の 場 合 は、 デステ ィネーシ ョ ンビッ ト を 変 更 しません。<br />
VBIF (False の 場 合 はビ ッ ト 単 位 を 挿 入 ) は、 第 2 オペラ ン ド の 対 応 する ビ ッ<br />
トが 0 の 場 合 は 第 1 オペラ ン ド からデステ ィ ネーシ ョ ンに 各 ビ ッ ト を 挿 入 し<br />
ます。 それ 以 外 の 場 合 は、 デステ ィネーシ ョ ンビッ ト を 変 更 しません。<br />
VBSL (ビ ッ ト 単 位 を 選 択 ) は、 デステ ィ ネーシ ョ ンの 対 応 するビ ッ ト が 1 の<br />
場 合 は 第 1 オペラ ン ド から、 0 の 場 合 は 第 2 オペラ ン ド からデステ ィ ネーシ ョ<br />
ンの 各 ビッ ト を 選 択 します。<br />
構 文<br />
Vop{cond}{.datatype} {Qd}, Qn, Qm<br />
Vop{cond}{.datatype} {Dd}, Dn, Dm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
op<br />
BIT、 BIF、 または BSL のいずれかにし ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
Qd, Qn, Qm<br />
任 意 に 指 定 で き るデータ 型 です。 アセンブラは datatype を 無 視 し<br />
ます。<br />
クワッドワード 演 算 で 使 用 するデスティネーションレジスタ、<br />
第 1 オペラ ン ド レジス タ、 第 2 オペラ ン ド レジス タ を 指 定 し ま<br />
す。<br />
Dd, Dn, Dm ダブルワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ン レ ジ ス タ、 第 1<br />
オペラ ン ド レジス タ、 第 2 オペラ ン ド レジス タ を 指 定 し ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-37<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.7.4 VMOV、 VMVN (レジスタ)<br />
ベクタ 移 動 (レジスタ) は、 ソースレジスタからデスティネーショ ンレジス<br />
タに 値 をコピーします。<br />
ベ ク タ のデータ の 各 ビ ッ ト を 反 転 さ せてか ら 代 入 する 命 令 (レ ジ ス タ) は<br />
ソースレジス タの 各 ビ ッ ト の 値 を 反 転 して、 結 果 をデステ ィ ネーシ ョ ンレジ<br />
スタに 返 します。<br />
構 文<br />
VMOV{cond}{.datatype} Qd, Qm<br />
VMOV{cond}{.datatype} Dd, Dm<br />
VMVN{cond}{.datatype} Qd, Qm<br />
VMVN{cond}{.datatype} Dd, Dm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
Qd, Qm<br />
任 意 に 指 定 で き るデータ 型 です。 アセンブラは datatype を 無 視 し<br />
ます。<br />
ク ワ ッ ド ワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ と<br />
ソースベクタを 指 定 します。<br />
Dd, Dm ダブルワード 演 算 で 使 用 するデステ ィ ネーシ ョ ンベク タ と ソー<br />
スベク タを 指 定 します。<br />
5-38 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.7.5 VACGE および VACGT<br />
ベ ク タ 絶 対 値 比 較 は、 ベ ク タ の 各 要 素 の 絶 対 値 を 取 得 し、 2 番 目 のベ ク タ の<br />
対 応 する 要 素 の 絶 対 値 と 比 較 し ます。 条 件 が True の 場 合 、 デステ ィ ネーシ ョ<br />
ンベ ク タ の 対 応 する 要 素 はすべて 1 に 設 定 されます。 それ 以 外 の 場 合 は、すべ<br />
て 0 に 設 定 されます。<br />
疑 似 命 令 「VACLE および VACLT」 (ページ 5-102) も 参 照 して 下 さい。<br />
構 文<br />
VACop{cond}.F32 {Qd}, Qn, Qm<br />
VACop{cond}.F32 {Dd}, Dn, Dm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
op<br />
以 下 のいずれかを 指 定 し ます。<br />
GE 以 上 ( 絶 対 値 )<br />
GT 超 ( 絶 対 値 比 較 )<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
Qd, Qn, Qm<br />
クワッドワード 演 算 で 使 用 するデスティネーションレジスタ、<br />
第 1 オペラ ン ド レジス タ、 第 2 オペラ ン ド レジス タ を 指 定 し ま<br />
す。<br />
Dd, Dn, Dm ダブルワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ン レ ジ ス タ、 第 1<br />
オペラ ン ド レジス タ、 第 2 オペラ ン ド レジス タ を 指 定 し ます。<br />
結 果 の datatype は I32 です。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-39<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.7.6 VCEQ、 VCGE、 VCGT、 VCLE、 および VCLT<br />
ベクタ 比 較 はベクタの 各 要 素 の 値 を 取 得 し、 2 番 目 のベ ク タ の 対 応 する 要 素<br />
の 値 または 0 と 比 較 します。 条 件 が True の 場 合 、 デス テ ィ ネーシ ョ ンベ ク タ<br />
の 対 応 する 要 素 はすべて 1 に 設 定 されます。 それ 以 外 の 場 合 は、 すべて 0 に 設<br />
定 されます。<br />
疑 似 命 令 「VCLE および VCLT」 (ページ 5-103) も 参 照 して 下 さい。<br />
構 文<br />
VCop{cond}.datatype {Qd}, Qn, Qm<br />
VCop{cond}.datatype {Dd}, Dn, Dm<br />
VCop{cond}.datatype {Qd}, Qn, #0<br />
VCop{cond}.datatype {Dd}, Dn, #0<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
以 下 のいずれかを 指 定 し ます。<br />
EQ 等 しい<br />
GE 以 上<br />
GT 超<br />
LE 以 下 ( 第 2 オペラ ン ド が #0 の 場 合 のみ)<br />
LT 未 満 ( 第 2 オペラ ン ド が #0 の 場 合 のみ)<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
以 下 のいずれかを 指 定 し ます。<br />
• EQ の 場 合 、 I8、 I16、 I32、 または F32<br />
• GE、 GT、 LE、 または LT には S8、 S16、 S32、 U8、 U16、 U32、 また<br />
は F32 (#0 形 式 を 除 く )<br />
• GE、 GT、 LE、 または LT には S8、 S16、 S32、 または F32 (#0 形<br />
式 )<br />
結 果 の datatype は 次 のよ う にな り ます。<br />
• オペ ラ ン ド のデータ 型 が I32、S32、U32、 または F32 の 場 合 は<br />
I32<br />
• オペ ラ ン ド のデータ 型 が I16、 S16、 または U16 の 場 合 は I16<br />
• オペ ラ ン ド のデータ 型 が I8、 S8、 または U8. の 場 合 は I8<br />
5-40 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
Qd, Qn, Qm<br />
クワッドワード 演 算 で 使 用 するデスティネーションレジスタ、<br />
第 1 オペラ ン ド レジス タ、 第 2 オペラ ン ド レジス タ を 指 定 し ま<br />
す。<br />
Dd, Dn, Dm ダブルワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ン レ ジ ス タ、 第 1<br />
オペラ ン ド レジス タ、 第 2 オペラ ン ド レジス タ を 指 定 し ます。<br />
#0 比 較 のために Qm または Dm をゼロ と 置 き 換 えます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-41<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.7.7 VTST<br />
VTST (ベクタテストビット) は、ベクタの 各 要 素 を 取 得 し、2 番 目 のベ ク タ<br />
の 対 応 する 要 素 を 使 用 し てビ ッ ト 単 位 論 理 積 を 求 めます。 結 果 がゼ ロ でない<br />
場 合 は、 デス テ ィ ネーシ ョ ンベ ク タ の 対 応 する 要 素 はすべて 1 に 設 定 されま<br />
す。 それ 以 外 の 場 合 は、 すべて 0 に 設 定 されます。<br />
構 文<br />
VTST{cond}.size {Qd}, Qn, Qm<br />
VTST{cond}.size {Dd}, Dn, Dm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
size<br />
8、 16、 または 32 のいずれかにし ます。<br />
Qd, Qn, Qm ク ワ ッ ド ワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ン レ ジ ス タ、<br />
第 1 オペラ ン ド レジス タ、 第 2 オペラ ン ド レジス タ を 指 定 し ま<br />
す。<br />
Dd, Dn, Dm ダブルワード 演 算 で 使 用 するデステ ィ ネーシ ョ ンレジスタ、 第 1<br />
オペラ ン ド レジス タ、 第 2 オペラ ン ド レ ジ ス タ を 指 定 し ます。<br />
5-42 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.8 NEON 汎 用 デー タ 処 理 命 令<br />
こ のセ ク シ ョ ンは 以 下 のサブセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「VCVT ( 固 定 小 数 点 ま たは 整 数 と 浮 動 小 数 点 と の 間 )」 (ページ 5-44)<br />
固 定 小 数 点 ま たは 整 数 と 浮 動 小 数 点 間 のベク タ 変 換<br />
• 「VCVT ( 半 精 度 浮 動 小 数 点 数 と 単 精 度 浮 動 小 数 点 数 間 の 変 換 )」 (ペー<br />
ジ 5-46)<br />
半 精 度 浮 動 小 数 点 数 と 単 精 度 浮 動 小 数 点 数 間 のベク タ 変 換<br />
• 「VDUP」 (ページ 5-47)<br />
ベクタの 全 レーンへのスカラの 複 製<br />
• 「VEXT」 (ページ 5-48)<br />
抽 出<br />
• 「VMOV、 VMVN (イ ミディエート)」 (ページ 5-49)<br />
移 動 と 負 の 移 動 (イ ミ デ ィ エー ト )<br />
• 「VMOVL, V{Q}MOVN, VQMOVUN」 (ページ 5-50)<br />
移 動 (レ ジ ス タ)<br />
• 「VREV」 (ページ 5-52)<br />
ベクタ 内 の 要 素 の 反 転<br />
• 「VSWP」 (ページ 5-53)<br />
ベクタのスワップ<br />
• 「VTBL, VTBX」 (ページ 5-54)<br />
ベクタテーブルの 検 索<br />
• 「VTRN」 (ページ 5-55)<br />
ベクタ 置 換<br />
• 「VUZP、 VZIP」 (ページ 5-56)<br />
ベク タのインターリーブと インターリーブの 解 除<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-43<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.8.1 VCVT ( 固 定 小 数 点 または 整 数 と 浮 動 小 数 点 との 間 )<br />
VCVT (ベ ク タ 変 換 ) はベク タ の 各 要 素 を 以 下 のいずれかの 方 法 で 変 換 し、 結<br />
果 をデステ ィ ネーシ ョ ンベク タに 返 し ます。<br />
• 浮 動 小 数 点 か ら 整 数 への 変 換<br />
• 整 数 か ら 浮 動 小 数 点 への 変 換<br />
• 浮 動 小 数 点 か ら 固 定 小 数 点 への 変 換<br />
• 固 定 小 数 点 か ら 浮 動 小 数 点 への 変 換<br />
構 文<br />
VCVT{cond}.type Qd, Qm {, #fbits}<br />
VCVT{cond}.type Dd, Dm {, #fbits}<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
type<br />
Qd, Qm<br />
Dd, Dm<br />
fbits<br />
ベク タの 要 素 のデータ 型 を 指 定 します。 以 下 のいずれかにな り ま<br />
す。<br />
S32.F32 浮 動 小 数 点 か ら 符 号 付 き 整 数 ま たは 固 定 小 数 点 への 変<br />
換<br />
U32.F32 浮 動 小 数 点 か ら 符 号 な し 整 数 ま たは 固 定 小 数 点 への 変<br />
換<br />
F32.S32 符 号 付 き 整 数 ま たは 固 定 小 数 点 か ら 浮 動 小 数 点 への 変<br />
換<br />
F32.U32 符 号 な し 整 数 ま たは 固 定 小 数 点 か ら 浮 動 小 数 点 への 変<br />
換<br />
ク ワ ッ ド ワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ と オ<br />
ペランドベクタを 指 定 します。<br />
ダブルワード 演 算 で 使 用 するデステ ィ ネーシ ョ ンベク タ と オペ<br />
ランドベクタを 指 定 します。<br />
こ のパ ラ メ ータ が 指 定 さ れてい る 場 合 は、 固 定 小 数 点 数 の 小 数<br />
部 ビ ッ ト を 指 定 し ます。 それ 以 外 の 場 合 は、 浮 動 小 数 点 と 整 数 間<br />
の 変 換 にな り ます。 fbits は 0 ~ 32 の 範 囲 で 指 定 する 必 要 があ り<br />
ます。 fbits を 省 略 し た 場 合 、 小 数 部 ビ ッ ト は 0 にな り ます。<br />
5-44 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
丸 め<br />
整 数 ま たは 固 定 小 数 点 か ら 浮 動 小 数 点 への 変 換 では、 近 似 値 への 丸 めを 使 用<br />
します。<br />
浮 動 小 数 点 か ら 整 数 ま たは 固 定 小 数 点 への 変 換 では、 ゼ ロ 方 向 への 丸 めを 使<br />
用 します。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-45<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.8.2 VCVT ( 半 精 度 浮 動 小 数 点 数 と 単 精 度 浮 動 小 数 点 数 間 の 変 換 )<br />
VCVT (ベ ク タ 変 換 ) は、 半 精 度 拡 張 をサポー ト し てお り 、 ベ ク タ の 各 要 素 を<br />
以 下 のいずれかの 方 法 で 変 換 し て、 結 果 をデス テ ィ ネーシ ョ ンベ ク タ に 返 し<br />
ます。<br />
• 半 精 度 浮 動 小 数 点 数 か ら 単 精 度 浮 動 小 数 点 数 まで (F32.F16)<br />
• 単 精 度 浮 動 小 数 点 数 か ら 半 精 度 浮 動 小 数 点 数 まで (F16.F32)<br />
構 文<br />
VCVT{cond}.F32.F16 Qd, Dm<br />
VCVT{cond}.F16.F32 Dd, Qm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
Qd, Dm<br />
Dd, Qm<br />
単 精 度 の 結 果 と 半 精 度 オペラ ン ド ベ ク タ のデス テ ィ ネーシ ョ ン<br />
ベク タ を 指 定 し ます。<br />
半 精 度 の 結 果 と 単 精 度 オペラ ン ド ベ ク タ のデス テ ィ ネーシ ョ ン<br />
ベク タ を 指 定 し ます。<br />
アーキテクチャ<br />
こ の 命 令 を 使 用 で き る のは、 半 精 度 拡 張 をサポー ト し てい る NEON システム<br />
だけです。<br />
5-46 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.8.3 VDUP<br />
VDUP (ベ ク タ 複 製 ) は、 デス テ ィ ネーシ ョ ンベ ク タ のすべての 要 素 にス カ ラ<br />
を 複 製 し ます。 ソースは NEON スカラまたは <strong>ARM</strong> レジスタです。<br />
構 文<br />
VDUP{cond}.size Qd, Dm[x]<br />
VDUP{cond}.size Dd, Dm[x]<br />
VDUP{cond}.size Qd, Rm<br />
VDUP{cond}.size Dd, Rm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
size<br />
Qd<br />
Dd<br />
Dm[x]<br />
Rm<br />
8、 16、 または 32 を 指 定 し ます。<br />
クワッドワード 演 算 で 使 用 するデスティネーションレジスタを<br />
指 定 し ます。<br />
ダブルワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ン レ ジ ス タ を 指<br />
定 します。<br />
NEON ス カ ラ を 指 定 し ます。<br />
<strong>ARM</strong> レジスタを 指 定 します。 Rm に pc は 指 定 でき ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-47<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.8.4 VEXT<br />
VEXT (ベ ク タ 抽 出 ) は、 第 2 オペラ ン ドベク タの 下 位 と 第 1 オペラ ン ドベク<br />
タの 上 位 から 8 ビ ッ ト 要 素 を 抽 出 し、 連 結 し て、 デス テ ィ ネーシ ョ ンベク タ<br />
に 結 果 を 返 し ます。 この 例 については、 図 5-2 を 参 照 して 下 さい。<br />
7 6<br />
5<br />
4<br />
3<br />
2<br />
1<br />
0<br />
7<br />
6<br />
5<br />
4<br />
3<br />
2<br />
1<br />
0<br />
Vm<br />
Vn<br />
Vd<br />
図 5-2 imm = 3 の 場 合 のダブルワー ド VEXT 演 算<br />
構 文<br />
VEXT{cond}.8 {Qd}, Qn, Qm, #imm<br />
VEXT{cond}.8 {Dd}, Dn, Dm, #imm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
Qd, Qn, Qm ク ワ ッ ド ワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ン レ ジ ス タ、<br />
第 1 オペラ ン ド レジス タ、 第 2 オペラ ン ド レジス タ を 指 定 し ま<br />
す。<br />
Dd, Dn, Dm ダブルワード 演 算 で 使 用 するデステ ィ ネーシ ョ ンレジスタ、 第 1<br />
オペラ ン ド レジス タ、 第 2 オペラ ン ド レ ジ ス タ を 指 定 し ます。<br />
imm<br />
第 2 オペラ ン ドベク タの 下 位 から 抽 出 する 8 ビット 要 素 の 数 を 指<br />
定 します。 ダブルワード 演 算 では 0 ~ 7 の 範 囲 、 ク ワ ッ ド ワー ド<br />
演 算 では 0 ~ 15 の 範 囲 です。<br />
VEXT 疑 似 命 令<br />
8 の 代 わ り に 16、 32、 または 64 のデータ 型 を 指 定 でき ます。 この 場 合 、 #imm<br />
にバイ ト の 代 わりにハーフワード、 ワード、 またはダブルワードを 使 用 する<br />
と 、 それに 応 じ て 許 容 範 囲 が 小 さ く な り ます。<br />
5-48 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.8.5 VMOV、 VMVN (イ ミディ エート)<br />
VMOV (ベク タ の 移 動 ) と VMVN (ベ ク タ の 負 の 移 動 ) イ ミ デ ィ エー ト では、 即<br />
値 がデステ ィ ネーシ ョ ンレジス タに 生 成 されます。<br />
構 文<br />
Vop{cond}.datatype Qd, #imm<br />
Vop{cond}.datatype Dd, #imm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
op<br />
MOV または MVN を 指 定 します。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
Qd ??? Dd<br />
imm<br />
I8、 I16、 I32、 I64、 または F32 のいずれかを 指 定 し ます。<br />
結 果 を 保 持 する NEON レジスタです。<br />
datatype に よ って 指 定 さ れる 型 の 定 数 です。 複 製 さ れてデス テ ィ<br />
ネーシ ョ ンレジス タに 配 置 されます。<br />
表 5-9 使 用 可 能 な 定 数<br />
datatype VMOV VMVN<br />
I8 0xXY -<br />
I16 0x00XY, 0xXY00 0xFFXY, 0xXYFF<br />
I32 0x000000XY, 0x0000XY00, 0x00XY0000, 0xXY000000 0xFFFFFFXY, 0xFFFFXYFF, 0xFFXYFFFF, 0xXYFFFFFF<br />
0x0000XYFF, 0x00XYFFFF<br />
0xFFFFXY00, 0xFFXY0000<br />
I64 バイ トマスク、0xGGHHJJKKLLMMNNPP a -<br />
F32 浮 動 小 数 点 数 b -<br />
a. 0xGG、 0xHH、 0xJJ、 0xKK、 0xLL、 0xMM、 0xNN、 および 0xPP のそれぞれを 0x00 または 0xFF にします。<br />
b. +/–n * 2 –r と 表 すこ と がで き る 任 意 の 数 値 。 こ こ で、 n と r は 整 数 、 16
NEON と VFP プログラ ミング<br />
5.8.6 VMOVL, V{Q}MOVN, VQMOVUN<br />
VMOVL (ベ ク タ Long 移 動 ) はダブルワー ド ベク タ の 各 要 素 を 取 得 し、 符 号 拡<br />
張 またはゼロ 拡 張 を 行 って 元 の 長 さの 2 倍 にし て、 ク ワ ッ ド ワー ドベク タに<br />
結 果 を 返 し ます。<br />
VMOVN (ベ ク タ 移 動 および Narrow) は、クワッドワードベクタの 各 要 素 の 下 位<br />
半 分 をダブルワー ド ベ ク タ の 対 応 する 要 素 にコ ピーし ます。<br />
VQMOVN (ベ ク タ サチュ レー ト 移 動 および Narrow) は、 オペランドベクタの 各<br />
要 素 をデス テ ィ ネーシ ョ ンベ ク タ の 対 応 する 要 素 に コ ピーし ます。 結 果 の 要<br />
素 の 幅 はオペラ ン ド 要 素 の 半 分 で、 値 は 結 果 の 幅 にサチュ レー ト されます。<br />
VQMOVUN (ベ ク タ サチ ュ レー ト 移 動 および Narrow、 符 号 付 き オペ ラ ン ド と 符 号<br />
のない 結 果 ) は、 オペラ ン ド ベ ク タ の 各 要 素 をデス テ ィ ネーシ ョ ンベ ク タ の<br />
対 応 する 要 素 に コ ピーし ます。 結 果 の 要 素 の 幅 はオペラ ン ド 要 素 の 半 分 で、<br />
値 は 結 果 の 幅 にサチュ レー ト されます。<br />
構 文<br />
VMOVL{cond}.datatype Qd, Dm<br />
V{Q}MOVN{cond}.datatype Dd, Qm<br />
VQMOVUN{cond}.datatype Dd, Qm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
Q<br />
このパラ メータが 指 定 されている 場 合 は、 結 果 がサチュレート<br />
されます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
Qd, Dm<br />
以 下 のいずれかを 指 定 し ます。<br />
S8, S16, S32 VMOVL の 場 合<br />
U8, U16, U62 VMOVL の 場 合<br />
I16, I32, I64 VMOVN の 場 合<br />
S16, S32, S64 VQMOVN または VQMOVUN の 場 合<br />
U16, U32, U64 VQMOVN では、 以 下 のよ う にな り ます。<br />
VMOVL のデステ ィ ネーシ ョ ンベク タ と オペラ ン ドベク タ を 指 定 し<br />
ます。<br />
5-50 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
Dd, Qm<br />
V{Q}MOV{U}N のデステ ィ ネーシ ョ ンベク タ と オペラ ン ドベク タ を<br />
指 定 し ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-51<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.8.7 VREV<br />
VREV16 (ハーフ ワー ド 内 のベク タ 反 転 ) は、 ベク タの 各 ハーフ ワー ド 内 の 8<br />
ビ ッ ト 要 素 の 順 序 を 逆 に し て、 対 応 するデス テ ィ ネーシ ョ ンベ ク タ に 結 果 を<br />
返 します。<br />
VREV32 (ワード 内 のベク タ 反 転 ) は、 ベク タの 各 ワード 内 の 8 ビットまたは<br />
16 ビ ッ ト 要 素 の 順 序 を 逆 に し て、 対 応 するデス テ ィ ネーシ ョ ンベ ク タ に 結 果<br />
を 返 し ます。<br />
VREV64 (ダブルワード 内 のベク タ 反 転 ) は、 ベク タの 各 ダブルワード 内 の 8<br />
ビット、16 ビッ ト、 または 32 ビッ ト 要 素 の 順 序 を 逆 にして、 対 応 するデス<br />
ティネーションベクタに 結 果 を 返 します。<br />
構 文<br />
VREVn{cond}.size Qd, Qm<br />
VREVn{cond}.size Dd, Dm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
n<br />
16、 32、 または 64 のいずれかにし ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
size<br />
Qd, Qm<br />
Dd, Dm<br />
8、 16、 32 のいずれかであ り 、 n 未 満 であ る 必 要 があ り ます。<br />
ク ワ ッ ド ワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ と オ<br />
ペランドベクタを 指 定 します。<br />
ダブルワード 演 算 で 使 用 するデステ ィ ネーシ ョ ンベク タ と オペ<br />
ランドベクタを 指 定 します。<br />
5-52 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.8.8 VSWP<br />
VSWP (ベク タ ス ワ ッ プ) は 2 つのベク タの 内 容 を 交 換 し ます。 ベクタはダブル<br />
ワード またはクワ ッ ド ワードのいずれかです。 データ 型 は 区 別 さ れません。<br />
構 文<br />
VSWP{cond}{.datatype} Qd, Qm<br />
VSWP{cond}{.datatype} Dd, Dm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
Qd, Qm<br />
Dd, Dm<br />
任 意 に 指 定 で き るデータ 型 です。 アセンブラは datatype を 無 視 し<br />
ます。<br />
ク ワ ッ ド ワー ド 演 算 で 使 用 するベ ク タ を 指 定 し ます。<br />
ダブルワー ド 演 算 で 使 用 するベ ク タ を 指 定 し ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-53<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.8.9 VTBL, VTBX<br />
VTBL (ベ ク タ テーブル 検 索 ) は、 コ ン ト ロールベ ク タ のバ イ ト イ ンデ ク ス を<br />
使 用 し、 テーブル 内 のバ イ ト 値 を 検 索 し て 新 し いベク タ を 生 成 し ます。 範 囲<br />
外 のイ ンデク スは 0 を 返 し ます。<br />
VTBX (ベ ク タ テーブル 拡 張 ) は、 同 様 に 動 作 し ますが、 範 囲 外 の イ ンデ ク ス<br />
がデス テ ィ ネーシ ョ ン 要 素 を 変 更 する こ と はあ り ません。<br />
構 文<br />
Vop{cond}.8 Dd, list, Dm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
op<br />
TBL または TBX を 指 定 し ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
Dd<br />
list<br />
Dm<br />
デステ ィネーシ ョ ンベク タを 指 定 します。<br />
テーブルを 含 むベク タを 指 定 し ます。 以 下 のいずれかにな り ま<br />
す。<br />
• {Dn}<br />
• {Dn,D(n+1)}<br />
• {Dn,D(n+1),D(n+2)}<br />
• {Dn,D(n+1),D(n+2),D(n+3)}<br />
list のすべてのレジス タは D0 ~ D31 の 範 囲 です。<br />
インデクスベクタを 指 定 します。<br />
5-54 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.8.10 VTRN<br />
VTRN (ベク タ 置 換 ) は、 オペラ ン ド ベ ク タ の 要 素 を 2 x 2 マ ト リ ク スの 要 素 と<br />
し て 処 理 し、 マ ト リ ク ス を 置 換 し ます。 図 5-3 と 図 5-4 は VTRN の 演 算 の 例 を<br />
示 します。<br />
Dm<br />
7 6 5 4 3 2<br />
1<br />
0<br />
Dd<br />
図 5-3 ダブルワード VTRN.8 演 算<br />
Dm<br />
1<br />
0<br />
Dd<br />
図 5-4 ダブルワード VTRN.32 演 算<br />
構 文<br />
VTRN{cond}.size Qd, Qm<br />
VTRN{cond}.size Dd, Dm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
size<br />
Qd, Qm<br />
Dd, Dm<br />
8、 16、 または 32 のいずれかにし ます。<br />
ク ワ ッ ド ワー ド 演 算 で 使 用 するベ ク タ を 指 定 し ます。<br />
ダブルワー ド 演 算 で 使 用 するベ ク タ を 指 定 し ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-55<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.8.11 VUZP、 VZIP<br />
VZIP (ベ ク タ 圧 縮 ) は 2 つのベク タの 要 素 を イ ン ター リ ーブし ます。<br />
VUZP (ベ ク タ 解 凍 ) は 2 つのベク タの 要 素 のイ ン ター リ ーブを 解 除 し ます。<br />
イ ン ター リ ーブ 解 除 の 例 については、 「3 要 素 構 造 体 か ら な る 配 列 の イ ン ター<br />
リ ーブの 解 除 」 (ページ 5-87) を 参 照 して 下 さい。 インターリーブはこの 逆 の<br />
プロセスです。<br />
構 文<br />
Vop{cond}.size Qd, Qm<br />
Vop{cond}.size Dd, Dm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
op<br />
UZP または ZIP を 指 定 し ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
size<br />
Qd, Qm<br />
Dd, Dm<br />
8、 16、 または 32 のいずれかにし ます。<br />
ク ワ ッ ド ワー ド 演 算 で 使 用 するベ ク タ を 指 定 し ます。<br />
ダブルワー ド 演 算 で 使 用 するベ ク タ を 指 定 し ます。<br />
注<br />
以 下 はすべて 同 じ 命 令 です。<br />
• VZIP.32 Dd, Dm<br />
• VUZP.32 Dd, Dm<br />
• VTRN.32 Dd, Dm<br />
命 令 は VTRN.32 Dd, Dm として 逆 アセンブルされます。 「VTRN」 (ページ 5-55)<br />
も 参 照 して 下 さい。<br />
5-56 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.9 NEON シフ ト 命 令<br />
こ のセ ク シ ョ ンは 以 下 のサブセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「VSHL、 VQSHL、 VQSHLU、 および VSHLL (イ ミディエートによる)」<br />
(ページ 5-58)<br />
イミディエート 値 による 左 シフト<br />
• 「V{Q}{R}SHL ( 符 号 付 き 変 数 に よ る)」 (ページ 5-60)<br />
符 号 付 き 変 数 に よ る 左 シ フ ト<br />
• 「V{R}SHR{N}, V{R}SRA (イ ミディエートによる)」 (ページ 5-61)<br />
イミディエート 値 による 右 シフト<br />
• 「VQ{R}SHR{U}N (イ ミディエートによる)」 (ページ 5-63)<br />
イミディエート 値 による 右 シフトとサチュレート<br />
• 「VSLI および VSRI」 (ページ 5-64)<br />
左 シフ ト と 挿 入 および 右 シフ ト と 挿 入<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-57<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.9.1 VSHL、 VQSHL、 VQSHLU、 および VSHLL (イ ミディ エートによる)<br />
ベ ク タ 左 シフ ト (イ ミ デ ィ エー ト に よ る) 命 令 は、 整 数 ベク タ の 各 要 素 を 取<br />
得 し、 即 値 で 左 にシフ ト して、 デスティネーシ ョ ンベクタに 結 果 を 返 します。<br />
VSHL (ベ ク タ 左 シフ ト ) では、 各 要 素 の 左 の 範 囲 外 にシ フ ト さ れたビ ッ ト は<br />
失 われます。<br />
VQSHL (ベ ク タ サチ ュ レー ト 左 シ フ ト ) と VQSHLU (ベク タ サチュ レー ト 左 シフ<br />
ト 符 号 なし) では、 サチュレーションが 発 生 するとスティッキー QC フラグ<br />
(FPSCR ビット [27]) が 設 定 されます。<br />
VSHLL (ベ ク タ 左 シ フ ト Long) では、 値 は 符 号 拡 張 ま たはゼ ロ 拡 張 さ れます。<br />
構 文<br />
V{Q}SHL{U}{cond}.datatype {Qd}, Qm, #imm<br />
V{Q}SHL{U}{cond}.datatype {Dd}, Dm, #imm<br />
VSHLL{cond}.datatype Qd, Dm, #imm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
Q<br />
U<br />
こ のパ ラ メ ータ が 指 定 さ れてい る 場 合 、 オーバーフ ローし た 結<br />
果 はサチュ レー ト されます。<br />
Q も 指 定 さ れてい る 場 合 にのみ 使 用 で き ます。 オペラ ン ド に 符 号<br />
が 付 いて も 結 果 には 符 合 が 付 き ません。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
Qd, Qm<br />
Dd, Dm<br />
以 下 のいずれかを 指 定 し ます。<br />
I8, I16, I32, I64 VSHL の 場 合<br />
S8, S16, S32 VSHLL、 VQSHL、 または VQSHLU の 場 合<br />
U8, U16, U32 VSHLL または VQSHL の 場 合<br />
S64<br />
U64<br />
VQSHL または VQSHLU の 場 合<br />
VQSHL の 場 合<br />
ク ワ ッ ド ワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ と オ<br />
ペランドベクタを 指 定 します。<br />
ダブルワード 演 算 で 使 用 するデステ ィ ネーシ ョ ンベク タ と オペ<br />
ランドベクタを 指 定 します。<br />
5-58 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
Qd, Dm<br />
imm<br />
long 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ と オペラ ン ド ベ<br />
クタを 指 定 します。<br />
以 下 の 範 囲 でシフ ト のサ イ ズを 指 定 する イ ミ デ ィ エー ト 定 数 で<br />
す。<br />
• VSHLL では、 1 ~ size(datatype)<br />
• VSHL、 VQSHL、 または VQSHLU では 1 ~ (size(datatype) – 1)<br />
0 を 使 用 でき ますが、 生 成 される コード は VMOV または VMOVL に 逆<br />
アセンブルされます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-59<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.9.2 V{Q}{R}SHL ( 符 号 付 き 変 数 によ る)<br />
VSHL ( 符 号 付 き 変 数 に よ るベ ク タ 左 シ フ ト ) は、 ベ ク タ の 各 要 素 を 取 得 し、 2<br />
番 目 のベ ク タ の 対 応 する 要 素 の 最 下 位 バイ ト の 値 でシ フ ト し、 デス テ ィ ネー<br />
ションベクタに 結 果 を 返 します。 シフ ト 値 が 正 の 場 合 は、 左 シフ ト にな り ま<br />
す。 それ 以 外 の 場 合 は、 右 シ フ ト にな り ます。<br />
結 果 はオプシ ョ ンでサチュ レー ト 、 丸 め、 ま たはその 両 方 を 実 行 で き ます。<br />
サチュ レーシ ョ ンが 発 生 した 場 合 は、 ステ ィ ッ キー QC フラグ (FPSCR ビッ<br />
ト [27]) が 設 定 されます。<br />
構 文<br />
V{Q}{R}SHL{cond}.datatype {Qd}, Qm, Qn<br />
V{Q}{R}SHL{cond}.datatype {Dd}, Dm, Dn<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
Q<br />
R<br />
こ のパ ラ メ ータ が 指 定 さ れてい る 場 合 、 オーバーフ ローし た 結<br />
果 はサチュ レー ト されます。<br />
こ のパ ラ メ ータ が 指 定 さ れてい る 場 合 、 結 果 は 丸 め られます。 指<br />
定 さ れていない 場 合 、 結 果 は 切 り 捨 て られます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
S8、 S16、 S32、 S64、 U8、 U16、 U32、 または U64 を 指 定 し ます。<br />
Qd, Qm, Qn ク ワ ッ ド ワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ、 第 1<br />
オペラ ン ドベク タ、 および 第 2 オペラ ン ドベク タ を 指 定 し ます。<br />
Dd, Dm, Dn<br />
ダブルワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ、 第 1 オ<br />
ペランドベクタ、 および 第 2 オペラ ン ドベク タ を 指 定 し ます。<br />
5-60 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.9.3 V{R}SHR{N}, V{R}SRA (イ ミディ エートによる)<br />
V{R}SHR{N} (イ ミディエート 値 によるベクタ 右 シフ ト) は、 ベクタの 各 要 素 を<br />
取 得 し、 イ ミ デ ィ エー ト 値 で 右 シフ ト し て、 デステ ィ ネーシ ョ ンベク タに 結<br />
果 を 返 し ます。 結 果 はオプシ ョ ンで 丸 め、 切 り 捨 て、 ま たはその 両 方 を 実 行<br />
できます。<br />
V{R}SRA (イ ミ デ ィ エー ト 値 に よ るベ ク タ 右 シフ ト と 累 積 ) は、 ベク タ の 各 要<br />
素 を 取 得 し、 イ ミ ディ エー ト 値 で 右 シフ ト して、 デステ ィ ネーシ ョ ンベク タ<br />
に 結 果 を 累 積 し ます。 結 果 はオプシ ョ ンで 丸 め る こ と がで き ます。<br />
構 文<br />
V{R}SHR{cond}.datatype {Qd}, Qm, #imm<br />
V{R}SHR{cond}.datatype {Dd}, Dm, #imm<br />
V{R}SRA{cond}.datatype {Qd}, Qm, #imm<br />
V{R}SRA{cond}.datatype {Dd}, Dm, #imm<br />
V{R}SHRN{cond}.datatype Dd, Qm, #imm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
R<br />
このパラ メ ータが 指 定 されている 場 合 は、 結 果 が 丸 められます。<br />
それ 以 外 の 場 合 、 結 果 は 切 り 捨 て ら れます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
Qd, Qm<br />
Dd, Dm<br />
Dd, Qm<br />
以 下 のいずれかを 指 定 し ます。<br />
S8?S16?S32?S64 V{R}SHR または V{R}SRA の 場 合<br />
U8?U16?U32?U64<br />
I16?I32?I64<br />
V{R}SHR または V{R}SRA の 場 合<br />
V{R}SHRN の 場 合<br />
クワッドワード 演 算 で 使 用 するデスティネーションベクタとオ<br />
ペランドベクタを 指 定 します。<br />
ダブルワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ と オペ<br />
ランドベクタを 指 定 します。<br />
Narrow 演 算 で 使 用 するデステ ィ ネーシ ョ ンベク タ と オペラ ン ド<br />
ベクタを 指 定 します。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-61<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
imm<br />
0 ~ (size(datatype) – 1) の 範 囲 でシ フ ト のサ イ ズを 指 定 する イ ミ<br />
ディエート 定 数 です。<br />
5-62 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.9.4 VQ{R}SHR{U}N (イ ミディ エートによる)<br />
VQ{R}SHR{U}N (ベ ク タ サチ ュ レー ト 右 シ フ ト 、 Narrow、 イミディエート 値 によ<br />
る、 オプシ ョ ンの 丸 め) は、 整 数 のク ワ ッ ド ワードベク タの 各 要 素 を 取 得 し、<br />
イ ミ デ ィ エー ト 値 で 右 シフ ト し、 ダブルワードベク タに 結 果 を 返 し ます。<br />
サチュ レーシ ョ ンが 発 生 した 場 合 は、 ステ ィ ッ キー QC フラグ (FPSCR ビッ<br />
ト [27]) が 設 定 さ れます。<br />
構 文<br />
VQ{R}SHR{U}N{cond}.datatype Dd, Qm, #imm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
R<br />
U<br />
このパラ メ ータが 指 定 されている 場 合 は、 結 果 が 丸 められます。<br />
それ 以 外 の 場 合 、 結 果 は 切 り 捨 て ら れます。<br />
このパラ メータが 指 定 されている 場 合 は、 オペランドに 符 号 が<br />
付 いていて も 結 果 には 符 合 が 付 き ません。 それ 以 外 の 場 合 は、 結<br />
果 はオペラ ン ド と 同 じ 型 にな り ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
Dd, Qm<br />
imm<br />
以 下 のいずれかを 指 定 し ます。<br />
S16?S32?S64<br />
U16?U32?U64<br />
VQ{R}SHRN または VQ{R}SHRUN の 場 合<br />
VQ{R}SHRN の 場 合 のみ<br />
デスティネーシ ョ ンベク タ とオペランドベク タを 指 定 します。<br />
0 ~ (size(datatype) – 1) の 範 囲 でシフ ト のサイ ズを 指 定 する イ ミ<br />
ディエート 定 数 です。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-63<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.9.5 VSLI および VSRI<br />
VSLI (ベ ク タ 左 シフ ト と 挿 入 ) は、 ベク タ の 各 要 素 を 取 得 し、 イ ミ デ ィ エー<br />
ト 値 で 左 シフ ト し て、 デス テ ィ ネーシ ョ ンベク タ に 結 果 を 挿 入 し ます。 各 要<br />
素 の 左 の 範 囲 外 にシフ ト されたビ ッ ト は 失 われます。<br />
VSRI (ベ ク タ 右 シフ ト と 挿 入 ) は、 ベク タ の 各 要 素 を 取 得 し、 イ ミ デ ィ エー<br />
ト 値 で 右 シフ ト し て、 デス テ ィ ネーシ ョ ンベク タ に 結 果 を 挿 入 し ます。 各 要<br />
素 の 右 の 範 囲 外 にシフ ト されたビ ッ ト は 失 われます。<br />
構 文<br />
Vop{cond}.size {Qd}, Qm, #imm<br />
Vop{cond}.size {Dd}, Dm, #imm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
op<br />
SLI または SRI を 指 定 し ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
size<br />
Qd, Qm<br />
Dd, Dm<br />
imm<br />
8、 16、 32、 または 64 のいずれかを 指 定 し ます。<br />
ク ワ ッ ド ワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ と オ<br />
ペランドベクタを 指 定 します。<br />
ダブルワード 演 算 で 使 用 するデステ ィ ネーシ ョ ンベク タ と オペ<br />
ランドベクタを 指 定 します。<br />
以 下 の 範 囲 でシフ ト のサイ ズを 指 定 する イ ミ デ ィ エー ト 定 数 で<br />
す。<br />
• VSLI の 場 合 、 0 ~ (size – 1)<br />
• VSRI の 場 合 、 1 ~ size<br />
5-64 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.10 NEON 汎 用 算 術 命 令<br />
こ のセ ク シ ョ ンは 以 下 のサブセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「VABA{L} および VABD{L}」 (ページ 5-66)<br />
ベ ク タ 絶 対 差 と 累 積 、 絶 対 差<br />
• 「V{Q}ABS および V{Q}NEG」 (ページ 5-67)<br />
ベ ク タ 絶 対 値 および 否 定<br />
• 「V{Q}ADD、 VADDL、 VADDW、 V{Q}SUB、 VSUBL、 VSUBW」 (ページ<br />
5-68)<br />
ベ ク タ 加 算 および 減 算<br />
• 「V{R}ADDHN および V{R}SUBHN」 (ページ 5-70)<br />
上 位 半 分 を 選 択 するベク タ 加 算 および 減 算<br />
• 「V{R}HADD および VHSUB」 (ページ 5-71)<br />
ベ ク タ 二 分 加 算 および 減 算<br />
• 「VPADD{L}、 VPADAL」 (ページ 5-72)<br />
ベ ク タペア ワ イ ズ 加 算 および 加 算 累 積<br />
• 「VMAX、 VMIN、 VPMAX、 VPMIN」 (ページ 5-74)<br />
ベ ク タ 最 大 値 、 最 小 値 、 ペア ワ イ ズ 最 大 値 、 およびペア ワ イ ズ 最 小 値<br />
• 「VCLS、 VCLZ、 VCNT」 (ページ 5-76)<br />
ベクタ 先 行 符 号 ビットカウント、 先 行 ゼロカウント、およびセットビッ<br />
トカウント<br />
• 「VRECPE および VRSQRTE」 (ページ 5-77)<br />
ベ ク タ 逆 数 の 推 定 および 逆 平 方 根 の 推 定<br />
• 「VRECPS および VRSQRTS」 (ページ 5-79)<br />
ベク タ 逆 数 のステ ッ プおよび 逆 平 方 根 のステ ッ プ<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-65<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.10.1 VABA{L} および VABD{L}<br />
VABA (ベ ク タ 絶 対 差 と 累 積 ) は、 あ るベ ク タ の 要 素 を 対 応 する 別 のベ ク タ の<br />
要 素 か ら 減 算 し、 その 結 果 の 絶 対 値 をデス テ ィ ネーシ ョ ンベ ク タ の 要 素 に 累<br />
積 します。<br />
VABD (ベ ク タ 絶 対 差 ) は、 あ るベ ク タ の 要 素 を 対 応 する 別 のベ ク タ の 要 素 か<br />
ら 減 算 し、 その 結 果 の 絶 対 値 をデス テ ィ ネーシ ョ ンベ ク タ の 要 素 に 返 し ます。<br />
いずれの 命 令 に も Long バージ ョ ンがあ り ます。<br />
構 文<br />
Vop{cond}.datatype {Qd}, Qn, Qm<br />
Vop{cond}.datatype {Dd}, Dn, Dm<br />
VopL{cond}.datatype Qd, Dn, Dm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
ABA または ABD を 指 定 し ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
以 下 のいずれかを 指 定 し ます。<br />
• VABA、 VABAL、 または VABDL の 場 合 、 S8、 S16、 S32、 U8、 U16、 ま<br />
たは U32<br />
• VABD の 場 合 、 S8、 S16、 S32、 U8、 U16、 U32、 または F32<br />
Qd, Qn, Qm ク ワ ッ ド ワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ、 第 1<br />
オペラ ン ドベク タ、 および 第 2 オペラ ン ドベク タ を 指 定 し ます。<br />
Dd, Dn, Dm<br />
Qd, Dn, Dm<br />
ダブルワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ、 第 1 オ<br />
ペランドベクタ、 および 第 2 オペラ ン ドベク タ を 指 定 し ます。<br />
Long 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ、 第 1 オペラ ン<br />
ドベクタ、 および 第 2 オペラ ン ドベク タ を 指 定 し ます。<br />
5-66 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.10.2 V{Q}ABS および V{Q}NEG<br />
VABS (ベク タ 絶 対 値 ) は、 ベク タ の 各 要 素 の 絶 対 値 を 取 得 し て、 その 結 果 を<br />
2 番 目 のベク タに 返 し ます ( 浮 動 小 数 点 バージ ョ ンは、 符 号 ビ ッ ト を ク リ ア<br />
するだけです)。<br />
VNEG (ベク タ 否 定 ) は、 ベ ク タ の 各 要 素 を 否 定 し て、 その 結 果 を 2 番 目 のベ<br />
クタに 返 します ( 浮 動 小 数 点 バージ ョ ンは、 符 号 ビ ッ ト を 反 転 する だけで<br />
す)。<br />
いずれの 命 令 にもサチュ レー ト バージ ョ ンがあ り ます。 サチュ レーシ ョ ンが<br />
発 生 し た 場 合 は、 ス テ ィ ッ キー QC フラグ (FPSCR ビット [27]) が 設 定 され<br />
ます。<br />
構 文<br />
V{Q}op{cond}.datatype Qd, Qm<br />
V{Q}op{cond}.datatype Dd, Dm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
Q<br />
op<br />
こ のパ ラ メ ータ が 指 定 さ れてい る 場 合 、 オーバーフ ローし た 結<br />
果 はサチュ レー ト されます。<br />
ABS または NEG を 指 定 します。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
Qd, Qm<br />
Dd, Dm<br />
以 下 のいずれかを 指 定 し ます。<br />
S8, S16, S32 VABS、 VNEG、 VQABS、 または VQNEG の 場 合<br />
F32<br />
VABS および VNEG の 場 合 のみ<br />
クワッドワード 演 算 で 使 用 するデスティネーションベクタとオ<br />
ペランドベクタを 指 定 します。<br />
ダブルワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ と オペ<br />
ランドベクタを 指 定 します。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-67<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.10.3 V{Q}ADD、 VADDL、 VADDW、 V{Q}SUB、 VSUBL、 VSUBW<br />
VADD (ベ ク タ 加 算 ) は、 2 つのベク タのそれぞれ 対 応 する 要 素 を 加 算 し、 そ<br />
の 結 果 をデステ ィ ネーシ ョ ンベク タに 返 し ます。<br />
VSUB (ベク タ 減 算 ) は、 あ るベク タの 要 素 を 対 応 する 別 のベク タの 要 素 から<br />
減 算 し、 その 結 果 をデス テ ィ ネーシ ョ ンベ ク タ に 返 し ます。<br />
いずれの 命 令 に もサチュ レー ト バージ ョ ン、 Long バージ ョ ン、 および Wide<br />
バージ ョ ンがあ り ます。 サチュ レーシ ョ ンが 発 生 した 場 合 は、 ステ ィ ッ キー<br />
QC フラグ (FPSCR ビッ ト [27]) が 設 定 さ れます。<br />
構 文<br />
V{Q}op{cond}.datatype {Qd}, Qn, Qm<br />
V{Q}op{cond}.datatype {Dd}, Dn, Dm<br />
VopL{cond}.datatype Qd, Dn, Dm<br />
VopW{cond}.datatype {Qd}, Qn, Dm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
Q<br />
op<br />
こ のパ ラ メ ータ が 指 定 さ れてい る 場 合 、 オーバーフ ローし た 結<br />
果 はサチュ レー ト されます。<br />
ADD または SUB を 指 定 し ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
以 下 のいずれかを 指 定 し ます。<br />
I8, I16, I32, I64, F32 VADD または VSUB の 場 合<br />
S8, S16, S32 VQADD、 VQSUB、 VADDL、 VADDW、 VSUBL、 or VSUBW の<br />
場 合<br />
U8, U16, U32 VQADD、 VQSUB、 VADDL、 VADDW、 VSUBL、 or VSUBW の<br />
場 合<br />
S64, U64 VQADD または VQSUB の 場 合<br />
Qd, Qn, Qm ク ワ ッ ド ワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ、 第 1<br />
オペラ ン ドベク タ、 および 第 2 オペラ ン ドベク タ を 指 定 し ます。<br />
Dd, Dn, Dm<br />
ダブルワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ、 第 1 オ<br />
ペランドベクタ、 および 第 2 オペラ ン ドベク タ を 指 定 し ます。<br />
5-68 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
Qd, Dn, Dm<br />
Qd, Qn, Dm<br />
Long 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ、 第 1 オペラ ン<br />
ドベクタ、 および 第 2 オペラ ン ドベク タ を 指 定 し ます。<br />
Wide 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ、 第 1 オペラ ン<br />
ドベクタ、 および 第 2 オペラ ン ドベク タ を 指 定 し ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-69<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.10.4 V{R}ADDHN および V{R}SUBHN<br />
V{R}ADDH ( 上 位 半 分 を 選 択 し てベ ク タ 加 算 し、 幅 を 狭 め る) は、 2 つのベク タ<br />
のそれぞれ 対 応 する 要 素 を 加 算 し、 その 結 果 の 上 位 半 分 を 選 択 し て、 最 終 的<br />
な 結 果 をデステ ィ ネーシ ョ ンベク タに 返 し ます。 結 果 は 丸 め る か、 切 り 捨 て<br />
ることができます。<br />
V{R}SUBH ( 上 位 半 分 を 選 択 するベ ク タ 減 算 および Narrow) は、 あるベクタの<br />
要 素 を 対 応 する 別 のベク タの 要 素 から 減 算 し、 その 結 果 の 上 位 半 分 を 選 択 し<br />
て、 最 終 的 な 結 果 をデステ ィ ネーシ ョ ンベク タに 返 し ます。 結 果 は 丸 め る か、<br />
切 り 捨 てることができます。<br />
構 文<br />
V{R}opHN{cond}.datatype Dd, Qn, Qm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
R<br />
op<br />
こ のパ ラ メ ータ が 指 定 さ れてい る 場 合 、 結 果 は 丸 め られます。 指<br />
定 さ れていない 場 合 、 結 果 は 切 り 捨 て られます。<br />
ADD または SUB を 指 定 し ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
I16、 I32、 または I64 のいずれかにし ます。<br />
Dd, Qn, Qm デステ ィネーシ ョ ンベク タ、 第 1 オペラ ン ドベク タ、 および 第 2<br />
オペラ ン ドベク タ を 指 定 し ます。<br />
5-70 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.10.5 V{R}HADD および VHSUB<br />
VHADD (ベ ク タ 二 分 加 算 ) は、 2 つのベ ク タ のそれぞれ 対 応 する 要 素 を 加 算 し、<br />
結 果 を 1 ビ ッ ト 右 にシフ ト して、 その 結 果 をデステ ィ ネーシ ョ ンベク タに 返<br />
します。 結 果 は 丸 め る か、 切 り 捨 て る こ と がで き ます。<br />
VHSUB (ベク タ 二 分 減 算 ) は、 あ るベク タ の 要 素 を 対 応 する 別 のベ ク タ の 要 素<br />
か ら 減 算 し、 結 果 を 1 ビッ ト 右 にシフトして、 その 結 果 をデスティネーショ<br />
ンベク タに 返 し ます。 結 果 は 常 に 切 り 捨 て ら れます。<br />
構 文<br />
V{R}HADD{cond}.datatype {Qd}, Qn, Qm<br />
V{R}HADD{cond}.datatype {Dd}, Dn, Dm<br />
VHSUB{cond}.datatype {Qd}, Qn, Qm<br />
VHSUB{cond}.datatype {Dd}, Dn, Dm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
R<br />
こ のパ ラ メ ータ が 指 定 さ れてい る 場 合 、 結 果 は 丸 め ら れます。 指<br />
定 さ れていない 場 合 、 結 果 は 切 り 捨 て ら れます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
S8、 S16、 S32、 U8、 U16、 または U32 のいずれかにし ます。<br />
Qd, Qn, Qm クワッドワード 演 算 で 使 用 するデスティネーションベクタ、 第 1<br />
オペラ ン ドベク タ、 および 第 2 オペラ ン ドベク タ を 指 定 し ます。<br />
Dd, Dn, Dm<br />
ダブルワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ、 第 1 オ<br />
ペランドベクタ、 および 第 2 オペラ ン ドベク タ を 指 定 し ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-71<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.10.6 VPADD{L}、 VPADAL<br />
VPADD (ベ ク タペア ワ イ ズ 加 算 ) は、 2 つのベ ク タ の 隣 接 する 要 素 のペア を 加<br />
算 し、 その 結 果 をデスティネーシ ョ ンベクタに 返 します。<br />
Dm<br />
Dn<br />
+ + +<br />
+<br />
Dd<br />
図 5-5 VPADD 演 算 の 例 (デー タ 型 I16 の 場 合 )<br />
VPADDL (ベ ク タペア ワ イ ズ 加 算 Long) は、 あるベクタの 隣 接 する 要 素 のペア<br />
を 加 算 し、 結 果 を 符 号 拡 張 ま たはゼ ロ 拡 張 し 元 の 幅 の 2 倍 に し て、 最 終 的 な<br />
結 果 をデステ ィ ネーシ ョ ンベク タに 返 し ます。<br />
Dm<br />
+ +<br />
Dd<br />
図 5-6 ダブルワード VPADDL 演 算 の 例 (デー タ 型 S16 の 場 合 )<br />
VPADAL (ベ ク タペア ワ イ ズ 加 算 累 積 Long) は、 あ るベク タ の 隣 接 する 要 素 の<br />
ペアを 加 算 し、 その 結 果 の 絶 対 値 をデステ ィ ネーシ ョ ンベク タの 要 素 に 累 積<br />
します。<br />
Dm<br />
+ +<br />
Dd<br />
図 5-7 VPADAL 演 算 の 例 (デー タ 型 S16 の 場 合 )<br />
5-72 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
構 文<br />
VPADD{cond}.datatype {Dd}, Dn, Dm<br />
VPopL{cond}.datatype Qd, Qm<br />
VPopL{cond}.datatype Dd, Dm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
ADD または ADA を 指 定 します。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
Dd, Dn, Dm<br />
以 下 のいずれかを 指 定 し ます。<br />
I8, I16, I32, F32 VPADD の 場 合<br />
S8, S16, S32 VPADDL または VPADAL の 場 合<br />
U8, U16, U32 VPADDL または VPADAL の 場 合<br />
VPADD 命 令 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ、 第 1 オペラ ン<br />
ドベクタ、 および 第 2 オペラ ン ドベク タ を 指 定 し ます。<br />
Qd, Qm クワッドワードの VPADDL または VPADAL で 使 用 するデステ ィ ネー<br />
ションベクタとオペランドベクタを 指 定 します。<br />
Dd, Dm ダブルワードの VPADDL または VPADAL で 使 用 するデス テ ィ ネー<br />
ションベクタとオペランドベクタを 指 定 します。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-73<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.10.7 VMAX、 VMIN、 VPMAX、 VPMIN<br />
VMAX (ベ ク タ 最 大 値 ) は、 2 つのベ ク タ のそれぞれ 対 応 する 要 素 を 比 較 し、<br />
各 ペアの 大 き い 方 の 要 素 をデス テ ィ ネーシ ョ ンベ ク タ の 対 応 する 要 素 に コ<br />
ピーします。<br />
VMIN (ベ ク タ 最 小 値 ) は、 2 つのベ ク タ のそれぞれ 対 応 する 要 素 を 比 較 し、<br />
各 ペアの 小 さい 方 の 要 素 をデスティネーショ ンベクタの 対 応 する 要 素 にコ<br />
ピーします。<br />
VPMAX (ベ ク タペア ワ イ ズ 最 大 値 ) は、 2 つのベク タの 隣 接 する 要 素 のペアを<br />
比 較 し、 各 ペアの 大 きい 方 の 要 素 をデス テ ィ ネーシ ョ ンベク タ の 対 応 する 要<br />
素 にコ ピーし ます。 オペラ ン ド と 結 果 はダブルワードベク タであ る 必 要 があ<br />
ります。<br />
VPMIN (ベ ク タペア ワ イ ズ 最 小 値 ) は、 2 つのベク タの 隣 接 する 要 素 のペアを<br />
比 較 し、 各 ペアの 小 さ い 方 の 要 素 をデス テ ィ ネーシ ョ ンベク タ の 対 応 する 要<br />
素 にコ ピーし ます。 オペラ ン ド と 結 果 はダブルワードベク タであ る 必 要 があ<br />
ります。<br />
ペア ワ イ ズ 演 算 の 図 については、 図 5-5 (ページ 5-72) を 参 照 して 下 さい。<br />
構 文<br />
Vop{cond}.datatype Qd, Qn, Qm<br />
Vop{cond}.datatype Dd, Dn, Dm<br />
VPop{cond}.datatype Dd, Dn, Dm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
MAX または MIN を 指 定 し ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
S8、 S16、 S32、 U8、 U16、 U32、 または F32 のいずれかにし ます。<br />
Qd, Qn, Qm ク ワ ッ ド ワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ、 第 1<br />
オペラ ン ドベク タ、 および 第 2 オペラ ン ドベク タ を 指 定 し ます。<br />
Dd, Dn, Dm<br />
ダブルワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ、 第 1 オ<br />
ペランドベクタ、 および 第 2 オペラ ン ドベク タ を 指 定 し ます。<br />
5-74 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
浮 動 小 数 点 の 最 大 値 と 最 小 値<br />
max(+0.0, –0.0) = +0.0<br />
min(+0.0, –0.0) = –0.0<br />
いずれかの 入 力 が NaN の 場 合 、 対 応 する 結 果 要 素 はデフ ォル ト の NaN にな り<br />
ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-75<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.10.8 VCLS、 VCLZ、 VCNT<br />
VCLS (ベ ク タ 先 行 符 号 ビ ッ ト カ ウ ン ト ) は、 あ るベ ク タ の 各 要 素 に 含 まれる<br />
最 上 位 ビ ッ ト に 続 く 連 続 ビ ッ ト ( 最 上 位 ビ ッ ト と 同 じ) の 数 をカウン ト し、<br />
その 結 果 を 2 番 目 のベ ク タ に 返 し ます。<br />
VCLZ (ベ ク タ 先 行 ゼ ロ カ ウ ン ト ) は、 あ るベク タ の 各 要 素 に 含 まれる 連 続 す<br />
るゼロの 数 をカウン ト し ( 最 上 位 ビ ッ ト から 開 始 )、 その 結 果 を 2 番 目 のベ ク<br />
タに 返 します。<br />
VCNT (ベクタセットビットカウント) は、 あるベクタの 各 要 素 に 含 まれる<br />
ビットの 数 をカウントし、 その 結 果 を 2 番 目 のベ ク タ に 返 し ます。<br />
構 文<br />
Vop{cond}.datatype Qd, Qm<br />
Vop{cond}.datatype Dd, Dm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
op<br />
CLS、 CLZ、 または CNT のいずれかにし ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
Qd, Qm<br />
Dd, Dm<br />
以 下 のいずれかを 指 定 し ます。<br />
• CLS の 場 合 、 S8、 S16、 または S32<br />
• CLZ の 場 合 、 I8、 I16、 または I32<br />
• CNT の 場 合 、 I8<br />
ク ワ ッ ド ワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ と オ<br />
ペランドベクタを 指 定 します。<br />
ダブルワード 演 算 で 使 用 するデステ ィ ネーシ ョ ンベク タ と オペ<br />
ランドベクタを 指 定 します。<br />
5-76 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.10.9 VRECPE および VRSQRTE<br />
VRECPE (ベク タ 逆 数 の 推 定 ) は、 あ るベ ク タ に 含 まれる 各 要 素 の 逆 数 の 近 似<br />
値 を 見 つけ、 その 結 果 を 2 番 目 のベク タに 返 し ます。<br />
VRSQRTE (ベ ク タ 逆 平 方 根 の 推 定 ) は、 あ るベク タ に 含 まれる 各 要 素 の 逆 平 方<br />
根 の 近 似 値 を 見 つけ、 その 結 果 を 2 番 目 のベ ク タ に 返 し ます。<br />
構 文<br />
Vop{cond}.datatype Qd, Qm<br />
Vop{cond}.datatype Dd, Dm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
op<br />
RECPE または RSQRTE を 指 定 し ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
Qd, Qm<br />
Dd, Dm<br />
U32 または F32 を 指 定 します。<br />
クワッドワード 演 算 で 使 用 するデスティネーションベクタとオ<br />
ペランドベクタを 指 定 します。<br />
ダブルワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ と オペ<br />
ランドベクタを 指 定 します。<br />
有 効 範 囲 外 の 入 力 を 指 定 し た 場 合 の 結 果<br />
表 5-10 に、 有 効 範 囲 外 の 入 力 値 を 指 定 し た 場 合 の 結 果 を 示 し ます。<br />
表 5-10 有 効 範 囲 外 の 入 力 を 指 定 し た 場 合 の 結 果<br />
オペラン ド 要 素 (VRECPE) オペラ ン ド 要 素 (VRSQRTE) 結 果 要 素<br />
整 数
NEON と VFP プログラ ミング<br />
浮 動 小 数 点 NaN NaN、 負 の 正 規 、 負 の 無 限 大 デフ ォル ト の<br />
NaN<br />
負 の 0、 負 の 非 正 規 負 の 0、 負 の 非 正 規 負 の 無 限 大 a<br />
正 の 0、 正 の 非 正 規 正 の 0、 正 の 非 正 規 正 の 無 限 大 a<br />
正 の 無 限 大 正 の 無 限 大 正 の 0<br />
負 の 無 限 大 負 の 0<br />
a. FPSCR (FPSCR[1]) では、 ゼロによ る 除 算 の 例 外 ビ ッ ト が 設 定 されます。<br />
表 5-10 有 効 範 囲 外 の 入 力 を 指 定 し た 場 合 の 結 果 ( 続 き)<br />
オペラン ド 要 素 (VRECPE) オペ ラ ン ド 要 素 (VRSQRTE) 結 果 要 素<br />
5-78 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.10.10 VRECPS および VRSQRTS<br />
VRECPS (ベク タ 逆 数 のス テ ッ プ) は、 あ るベク タ の 要 素 を 対 応 する 別 のベ ク<br />
タの 要 素 で 乗 算 し、 その 結 果 を 2 か ら 減 算 し て、 最 終 的 な 結 果 をデス テ ィ<br />
ネーシ ョ ンベク タの 要 素 に 返 し ます。<br />
VRSQRTS (ベ ク タ 逆 平 方 根 のス テ ッ プ) は、 あ るベ ク タ の 要 素 を 対 応 する 別 の<br />
ベクタの 要 素 で 乗 算 し、 その 結 果 を 3 から 減 算 して 2 で 除 算 し、 最 終 的 な 結<br />
果 をデス テ ィ ネーシ ョ ンベ ク タ の 要 素 に 返 し ます。<br />
構 文<br />
Vop{cond}.F32 {Qd}, Qn, Qm<br />
Vop{cond}.F32 {Dd}, Dn, Dm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
op<br />
RECPS または RSQRTS を 指 定 し ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
Qd, Qn, Qm クワッドワード 演 算 で 使 用 するデスティネーションベクタ、 第 1<br />
オペラ ン ドベク タ、 および 第 2 オペラ ン ドベク タ を 指 定 し ます。<br />
Dd, Dn, Dm<br />
ダブルワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ、 第 1 オ<br />
ペランドベクタ、 および 第 2 オペラ ン ドベク タ を 指 定 し ます。<br />
有 効 範 囲 外 の 入 力 を 指 定 し た 場 合 の 結 果<br />
表 5-11 に、 有 効 範 囲 外 の 入 力 値 を 指 定 し た 場 合 の 結 果 を 示 し ます。<br />
表 5-11 有 効 範 囲 外 の 入 力 を 指 定 し た 場 合 の 結 果<br />
第 1 オペラン ド 要 素 第 2 オペラ ン ド 要 素 結 果 要 素 (VRECPS) 結 果 要 素 (VRSQRTS)<br />
NaN - デフォル ト の NaN デフォル ト の NaN<br />
- NaN デフォル ト の NaN デフォル ト の NaN<br />
+/– 0.0 ま たは 非 正 規 +/– 無 限 大 2.0 1.5<br />
+/– 無 限 大 +/– 0.0 ま たは 非 正 規 2.0 1.5<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-79<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
使 用 法<br />
ニ ュー ト ン ラ プ ソ ン 法 に よ る 反 復 計 算 :<br />
x n+1 = x n (2-dx n )<br />
VRECPE を d に 適 用 し た 結 果 が x 0 である 場 合 に (1/d) に 収 束 し ます。<br />
ニ ュー ト ン ラ プ ソ ン 法 に よ る 反 復 計 算 :<br />
x n+1 = x n (3-dx n<br />
2)/2<br />
VRSQRTE を d に 適 用 し た 結 果 が x 0 である 場 合 に (1/√d) に 収 束 し ます。<br />
5-80 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.11 NEON 乗 算 命 令<br />
こ のセ ク シ ョ ンは 以 下 のサブセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「VMUL{L}、 VMLA{L}、 VMLS{L}」 (ページ 5-82)<br />
ベ ク タ 乗 算 、 積 和 、 および 積 差<br />
• 「VMUL{L}、 VMLA{L}、 VMLS{L} (スカラによる)」 (ページ 5-84)<br />
ベ ク タ 乗 算 、 積 和 、 および 積 差 (ス カ ラ に よ る)<br />
• 「VQDMULL、 VQDMLAL、 VQDMLSL (ベ ク タ ま たはス カ ラ に よ る)」<br />
(ページ 5-85)<br />
ベ ク タサチュ レー ト ダブル 乗 算 、 積 和 、 および 積 差 (ベク タ ま たはス カ<br />
ラによる)<br />
• 「VQ{R}DMULH (ベ ク タ ま たはス カ ラ に よ る)」 (ページ 5-86)<br />
上 位 半 分 を 返 すベ ク タ サチュ レー ト ダブル 乗 算 (ベ ク タ ま たはス カ ラ に<br />
よる)<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-81<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.11.1 VMUL{L}、 VMLA{L}、 VMLS{L}<br />
VMUL (ベ ク タ 乗 算 ) は、 2 つのベク タのそれぞれ 対 応 する 要 素 を 乗 算 し、 そ<br />
の 結 果 をデステ ィ ネーシ ョ ンベク タに 返 し ます。<br />
VMLA (ベ ク タ 積 和 ) は、 2 つのベク タのそれぞれ 対 応 する 要 素 を 乗 算 し、 そ<br />
の 結 果 をデステ ィ ネーシ ョ ンベク タの 要 素 に 累 積 し ます。<br />
VMLS (ベ ク タ 積 差 ) は、 2 つのベク タのそれぞれ 対 応 する 要 素 を 乗 算 し、 そ<br />
の 結 果 をデス テ ィ ネーシ ョ ンベ ク タ の 対 応 する 要 素 か ら 減 算 し て、 最 終 的 な<br />
結 果 をデステ ィ ネーシ ョ ンベク タに 返 し ます。<br />
構 文<br />
Vop{cond}.datatype {Qd}, Qn, Qm<br />
Vop{cond}.datatype {Dd}, Dn, Dm<br />
VopL{cond}.datatype Qd, Dn, Dm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
以 下 のいずれかを 指 定 し ます。<br />
MUL 乗 算<br />
MLA 積 和<br />
MLS 積 差<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
以 下 のいずれかを 指 定 し ます。<br />
I8, I16, I32, F32 MUL、 MLA、 または MLS の 場 合<br />
S8, S16, S32 MULL、 MLAL、 または MLSL の 場 合<br />
U8, U16, U32 MULL、 MLAL、 または MLSL の 場 合<br />
P8<br />
MUL または MULL の 場 合<br />
データ 型 P8 については、 「{0,1} を 超 え る 多 項 式 算 術 演 算 」 (ペー<br />
ジ 5-22) を 参 照 して 下 さい。<br />
Qd, Qn, Qm ク ワ ッ ド ワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ、 第 1<br />
オペラ ン ドベク タ、 および 第 2 オペラ ン ドベク タ を 指 定 し ます。<br />
Dd, Dn, Dm<br />
ダブルワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ、 第 1 オ<br />
ペランドベクタ、 および 第 2 オペラ ン ドベク タ を 指 定 し ます。<br />
5-82 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
Qd, Dn, Dm<br />
Long 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ、 第 1 オペラ ン<br />
ドベクタ、 および 第 2 オペラ ン ドベク タ を 指 定 し ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-83<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.11.2 VMUL{L}、 VMLA{L}、 VMLS{L} (スカ ラによる)<br />
VMUL (ス カ ラ に よ るベ ク タ 乗 算 ) は、 あ るベク タ の 各 要 素 を ス カ ラ で 乗 算 し、<br />
その 結 果 をデステ ィ ネーシ ョ ンベク タに 返 し ます。<br />
VMLA (ベ ク タ 積 和 ) は、 あ るベク タ の 各 要 素 を ス カ ラ で 乗 算 し、 その 結 果 を<br />
デス テ ィ ネーシ ョ ンベ ク タ の 対 応 する 要 素 に 累 積 し ます。<br />
VMLS (ベ ク タ 積 差 ) は、 あ るベク タ の 各 要 素 を ス カ ラ で 乗 算 し、 その 結 果 を<br />
デス テ ィ ネーシ ョ ンベ ク タ の 対 応 する 要 素 か ら 減 算 し て、 最 終 的 な 結 果 をデ<br />
スティネーショ ンベクタに 返 します。<br />
構 文<br />
Vop{cond}.datatype {Qd}, Qn, Dm[x]<br />
Vop{cond}.datatype {Dd}, Dn, Dm[x]<br />
VopL{cond}.datatype Qd, Dn, Dm[x]<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
以 下 のいずれかを 指 定 し ます。<br />
MUL 乗 算<br />
MLA 積 和<br />
MLS 積 差<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
以 下 のいずれかを 指 定 し ます。<br />
I16, I32, F32 MUL、 MLA、 または MLS の 場 合<br />
S16, S32 MULL、 MLAL、 または MLSL の 場 合<br />
U16, U32 MULL, MLAL、 または MLSL の 場 合<br />
Qd, Qn ク ワ ッ ド ワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ と 第 1<br />
オペラ ン ドベク タ を 指 定 し ます。<br />
Dd, Dn<br />
Qd, Dn<br />
Dm[x]<br />
ダブルワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ と 第 1 オ<br />
ペランドベクタを 指 定 します。<br />
Long 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ と 第 1 オペラ ン<br />
ドベクタを 指 定 します。<br />
第 2 オペラ ン ド を 保 持 する ス カ ラ です。<br />
5-84 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.11.3 VQDMULL、 VQDMLAL、 VQDMLSL (ベク タ またはスカ ラによる)<br />
ベ ク タ サチ ュ レー ト ダブル 乗 算 命 令 は、 オペラ ン ド を 乗 算 し、 その 結 果 を 2<br />
倍 にし ます。 VQDMULL は、 結 果 をデステ ィ ネーシ ョ ンレジス タに 返 し ます。<br />
VQDMLAL は、 結 果 をデステ ィ ネーシ ョ ン レジ ス タの 値 に 加 算 し ます。 VQDMLSL<br />
は、 結 果 をデス テ ィ ネーシ ョ ン レ ジ ス タ の 値 か ら 減 算 し ます。<br />
オーバーフ ローし た 結 果 はサチュ レー ト されます。 サチュ レーシ ョ ンが 発 生<br />
した 場 合 は、 スティ ッキー QC フラグ (FPSCR ビッ ト [27]) が 設 定 されます。<br />
構 文<br />
VQDopL{cond}.datatype Qd, Dn, Dm<br />
VQDopL{cond}.datatype Qd, Dn, Dm[x]<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
op<br />
以 下 のいずれかを 指 定 し ます。<br />
MUL 乗 算<br />
MLA 積 和<br />
MLS 積 差<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
Qd, Dn<br />
Dm<br />
Dm[x]<br />
S16 または S32 を 指 定 します。<br />
デスティネーシ ョ ンベク タ と 第 1 オペラ ン ドベク タ を 指 定 し ま<br />
す。<br />
ベクタによる 演 算 の 第 2 オペラ ン ド を 保 持 するベク タです。<br />
スカラによる 演 算 の 第 2 オペラ ン ド を 保 持 する ス カ ラです。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-85<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.11.4 VQ{R}DMULH (ベク タ またはスカ ラによる)<br />
ベ ク タ サチュ レー ト ダブル 乗 算 命 令 は、 オペラ ン ド を 乗 算 し、 その 結 果 を 2<br />
倍 にし ます。 結 果 の 上 位 半 分 しか 返 されません。<br />
オーバーフ ローし た 結 果 はサチュ レー ト されます。 サチュ レーシ ョ ンが 発 生<br />
した 場 合 は、 スティ ッキー QC フラグ (FPSCR ビット [27]) が 設 定 されます。<br />
構 文<br />
VQ{R}DMULH{cond}.datatype {Qd}, Qn, Qm<br />
VQ{R}DMULH{cond}.datatype {Dd}, Dn, Dm<br />
VQ{R}DMULH{cond}.datatype {Qd}, Qn, Dm[x]<br />
VQ{R}DMULH{cond}.datatype {Dd}, Dn, Dm[x]<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
R<br />
こ のパ ラ メ ータ が 指 定 さ れてい る 場 合 、 結 果 は 丸 め られます。 指<br />
定 さ れていない 場 合 、 結 果 は 切 り 捨 て られます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
S16 または S32 を 指 定 し ます。<br />
Qd, Qn ク ワ ッ ド ワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ と 第 1<br />
オペラ ン ドベク タ を 指 定 し ます。<br />
Dd, Dn<br />
Qm ??? Dm<br />
Dm[x]<br />
ダブルワー ド 演 算 で 使 用 するデス テ ィ ネーシ ョ ンベ ク タ と 第 1 オ<br />
ペランドベクタを 指 定 します。<br />
ベクタによる 演 算 の 第 2 オペラ ン ド を 保 持 するベ ク タ です。<br />
スカラによる 演 算 の 第 2 オペラ ン ド を 保 持 する ス カ ラ です。<br />
5-86 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.12 NEON 要 素 と 構 造 体 のロー ド / ストア 命 令<br />
こ のセ ク シ ョ ンは 以 下 のサブセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「インターリーブ」<br />
• 「ロー ド と ス ト ア 命 令 、 要 素 と 構 造 体 の 命 令 におけ る 境 界 調 整 の 制 約 」<br />
(ページ 5-88)<br />
• 「VLDn および VSTn (1 レーンへの 1 つの n 要 素 構 造 体 )」 (ページ 5-89)<br />
こ れは、 ほ と んどすべてのデータ ア ク セスで 使 用 さ れます。 正 規 ベ ク タ<br />
をロードできます (n = 1)。<br />
• 「VLDn ( 全 レーンへの 1 つの n 要 素 構 造 体 )」 (ページ 5-91)<br />
• 「VLDn および VSTn ( 複 数 の n 要 素 構 造 体 )」 (ページ 5-93)<br />
5.12.1 インターリーブ<br />
こ のグループの 命 令 の 多 く は、 構 造 体 を メ モ リ に 保 存 する と き に イ ン ター<br />
リ ーブを 可 能 に し、 構 造 体 を メ モ リ か ら ロー ド する と き に イ ン ター リ ーブの<br />
解 除 を 可 能 に し ます。 図 5-8 に、 イ ン ター リ ーブの 解 除 の 例 を 示 し ます。 イン<br />
ターリーブはこの 逆 のプロセスです。<br />
A[0].x<br />
A[0].y<br />
A[0].z<br />
A[1].x<br />
A[1].y<br />
A[1].z<br />
A[2].x<br />
A[2].y<br />
A[2].z<br />
A[3].x<br />
A[3].y<br />
A[3].z<br />
Z 3<br />
Z 2 Z 1 Z 0<br />
D2<br />
Y 3<br />
X 3 X 2 X 1 X 0 D0<br />
Y 2 Y 1 Y 0 D1<br />
図 5-8 3 要 素 構 造 体 から なる 配 列 のイ ン タ ー リ ーブの 解 除<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-87<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.12.2 ロー ド と ス ト ア 命 令 、 要 素 と 構 造 体 の 命 令 における 境 界 調 整 の 制 約<br />
通 常 、 こ れら の 命 令 を 使 用 する と 、 メ モ リ 整 列 の 境 界 調 整 を 指 定 で き ます。<br />
命 令 で 境 界 調 整 が 指 定 さ れていない 場 合 、 境 界 調 整 の 制 約 は、 次 の よ う に A<br />
ビット (CP15 レジスタ 1 ビッ ト [1]) によって 制 御 されます。<br />
• A ビッ トが 0 の 場 合 、 境 界 調 整 の 制 約 はあ り ません (ただ し、 厳 密 に 順<br />
序 を 指 定 さ れた メ モ リ やデバイ ス メ モ リ な ど、 ア ク セスが 整 列 要 素 であ<br />
る 場 合 を 除 き ます。 こ の 場 合 は 予 測 し ない 結 果 が 返 さ れます)。<br />
• A ビッ トが 1 の 場 合 、 ア ク セ スは 整 列 要 素 であ る 必 要 があ り ます。<br />
ア ド レ スが 正 し く 整 列 さ れていない と 、 境 界 調 整 エ ラーが 発 生 し ます。<br />
5-88 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.12.3 VLDn および VSTn (1 レーンへの 1 つの n 要 素 構 造 体 )<br />
1 レーンへの 1 つの n 要 素 構 造 体 をベ ク タ ロー ド 。 1 つの n 要 素 構 造 体 を メ モ<br />
リから 1 つま たは 複 数 の NEON レジスタにロード します。 ロード されなかっ<br />
たレジスタの 要 素 は 変 更 されません。<br />
1 レーンへの 1 つの n 要 素 構 造 体 をベ ク タ ス ト ア。 1 つの n 要 素 構 造 体 を 1 つ<br />
または 複 数 の NEON レジスタから メモリにス ト アします。<br />
構 文<br />
Vopn{cond}.datatype list, [Rn{@align}]{!}<br />
Vopn{cond}.datatype list, [Rn{@align}], Rm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
n<br />
LD または ST を 指 定 し ます。<br />
1、 2、 3、 または 4 のいずれかにし ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
list<br />
Rn<br />
align<br />
表 5-12 (ページ 5-90) を 参 照 して 下 さい。<br />
NEON レジスタ リ ス ト を 指 定 します。 オプシ ョ ンについては、<br />
表 5-12 (ページ 5-90) を 参 照 して 下 さい。<br />
ベース ア ド レ ス を 保 持 する <strong>ARM</strong> レジスタです。 Rn を r15 にする<br />
ことはできません。<br />
オプシ ョ ンの 境 界 調 整 を 指 定 し ます。 オプシ ョ ンについては、<br />
表 5-12 (ページ 5-90) を 参 照 して 下 さい。<br />
! ! が 指 定 されている 場 合 、 Rn は (Rn + 命 令 に よ って 転 送 さ れるバ<br />
イト 数 ) に 更 新 されます。 更 新 は、 すべての ロー ド ま たはス ト ア<br />
が 実 行 された 後 に 行 われます。<br />
Rm<br />
ベース ア ド レ スか ら のオフセ ッ ト を 保 持 する <strong>ARM</strong> レジスタで<br />
す。 Rm が 指 定 されている 場 合 、 メ モ リ にア ク セスする ためにア ド<br />
レスが 使 用 された 後 で、Rn は (Rn + Rm) に 更 新 されます。 Rm に r13<br />
と r15 は 指 定 でき ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-89<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
表 5-12 パラ メ ー タの 有 効 な 組 み 合 わせ<br />
n datatype list a align b 境 界 調 整<br />
1 8 {Dd[x]} - 標 準 のみ<br />
16 {Dd[x]} @16 2 バイ ト<br />
32 {Dd[x]} @32 4 バイ ト<br />
2 8 {Dd[x], D(d+1)[x]} @16 2 バイ ト<br />
16 {Dd[x], D(d+1)[x]} @32 4 バイ ト<br />
{Dd[x], D(d+2)[x]} @32 4 バイ ト<br />
32 {Dd[x], D(d+1)[x]} @64 8 バイ ト<br />
{Dd[x], D(d+2)[x]} @64 8 バイ ト<br />
3 8 {Dd[x], D(d+1)[x], D(d+2)[x]} - 標 準 のみ<br />
16 または<br />
32<br />
{Dd[x], D(d+1)[x], D(d+2)[x]} - 標 準 のみ<br />
{Dd[x], D(d+2)[x], D(d+4)[x]} - 標 準 のみ<br />
4 8 {Dd[x], D(d+1)[x], D(d+2)[x], D(d+3)[x]} @32 4 バイ ト<br />
16 {Dd[x], D(d+1)[x], D(d+2)[x], D(d+3)[x]} @64 8 バイ ト<br />
{Dd[x], D(d+2)[x], D(d+4)[x], D(d+6)[x]} @64 8 バイ ト<br />
32 {Dd[x], D(d+1)[x], D(d+2)[x], D(d+3)[x]} @64 または<br />
@128<br />
8 バイ ト または<br />
16 バイ ト<br />
{Dd[x], D(d+2)[x], D(d+4)[x], D(d+6)[x]}<br />
@64 または<br />
@128<br />
8 バイ ト または<br />
16 バイ ト<br />
a. 表 内 のすべてのレ ジ ス タは D0 ~ D31 の 範 囲 内 にあ る 必 要 があ り ます。<br />
b. Align は 省 略 でき ます。 省 略 し た 場 合 は、 標 準 の 境 界 調 整 ルールが 適 用 さ れます。 「ロード と ス<br />
ト ア 命 令 、 要 素 と 構 造 体 の 命 令 におけ る 境 界 調 整 の 制 約 」 (ページ 5-88) を 参 照 して 下 さい。<br />
5-90 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.12.4 VLDn ( 全 レーンへの 1 つの n 要 素 構 造 体 )<br />
全 レーンへの 1 つの n 要 素 構 造 体 をベ ク タ ロー ド 。 1 つの n 要 素 構 造 体 の 複 数<br />
のコピーをメモリから 1 つまたは 複 数 の NEON レジスタにロードします。<br />
構 文<br />
VLDn{cond}.datatype list, [Rn{@align}]{!}<br />
VLDn{cond}.datatype list, [Rn{@align}], Rm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
n<br />
1、 2、 3、 または 4 のいずれかにし ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
list<br />
Rn<br />
align<br />
表 5-13 (ページ 5-92) を 参 照 して 下 さい。<br />
NEON レジスタ リ ス ト を 指 定 します。 オプシ ョ ンについては、<br />
表 5-13 (ページ 5-92) を 参 照 して 下 さい。<br />
ベース ア ド レ ス を 保 持 する <strong>ARM</strong> レジスタです。 Rn を r15 にする<br />
ことはできません。<br />
オプシ ョ ンの 境 界 調 整 を 指 定 し ます。 オプシ ョ ンについては、<br />
表 5-13 (ページ 5-92) を 参 照 して 下 さい。<br />
! ! が 指 定 されている 場 合 、 Rn は (Rn + 命 令 に よ って 転 送 さ れるバ<br />
イト 数 ) に 更 新 されます。 更 新 は、 すべての ロー ド ま たはス ト ア<br />
が 実 行 された 後 に 行 われます。<br />
Rm<br />
ベース ア ド レ スか ら のオフセ ッ ト を 保 持 する <strong>ARM</strong> レジスタで<br />
す。 Rm が 指 定 されている 場 合 、 メ モ リ にア ク セスする ためにア ド<br />
レスが 使 用 された 後 で、Rn は (Rn + Rm) に 更 新 されます。 Rm に r13<br />
と r15 は 指 定 でき ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-91<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
表 5-13 パラ メ ー タの 有 効 な 組 み 合 わせ<br />
n datatype list a align b 境 界 調 整<br />
1 8 {Dd[]} - 標 準 のみ<br />
{Dd[],D(d+1)[]} - 標 準 のみ<br />
16 {Dd[]} @16 2 バイ ト<br />
{Dd[],D(d+1)[]} @16 2 バイ ト<br />
32 {Dd[]} @32 4 バイ ト<br />
{Dd[],D(d+1)[]} @32 4 バイ ト<br />
2 8 {Dd[], D(d+1)[]} @8 バイ ト<br />
{Dd[], D(d+2)[]} @8 バイ ト<br />
16 {Dd[], D(d+1)[]} @16 2 バイ ト<br />
{Dd[], D(d+2)[]} @16 2 バイ ト<br />
32 {Dd[], D(d+1)[]} @32 4 バイ ト<br />
{Dd[], D(d+2)[]} @32 4 バイ ト<br />
3 8、 16、 ま<br />
たは 32<br />
{Dd[], D(d+1)[], D(d+2)[]} - 標 準 のみ<br />
{Dd[], D(d+2)[], D(d+4)[]} - 標 準 のみ<br />
4 8 {Dd[], D(d+1)[], D(d+2)[], D(d+3)[]} @32 4 バイ ト<br />
{Dd[], D(d+2)[], D(d+4)[], D(d+6)[]} @32 4 バイ ト<br />
16 {Dd[], D(d+1)[], D(d+2)[], D(d+3)[]} @64 8 バイ ト<br />
{Dd[], D(d+2)[], D(d+4)[], D(d+6)[]} @64 8 バイ ト<br />
32 {Dd[], D(d+1)[], D(d+2)[], D(d+3)[]} @64 または<br />
@128<br />
8 バイ ト または<br />
16 バイ ト<br />
{Dd[], D(d+2)[], D(d+4)[], D(d+6)[]}<br />
@64 または<br />
@128<br />
8 バイ ト または<br />
16 バイ ト<br />
a. 表 内 のすべてのレ ジ ス タは D0 ~ D31 の 範 囲 内 にあ る 必 要 があ り ます。<br />
b. Align は 省 略 でき ます。 省 略 し た 場 合 は、 標 準 の 境 界 調 整 ルールが 適 用 さ れます。 「ロード と ス<br />
ト ア 命 令 、 要 素 と 構 造 体 の 命 令 におけ る 境 界 調 整 の 制 約 」 (ページ 5-88) を 参 照 して 下 さい。<br />
5-92 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.12.5 VLDn および VSTn ( 複 数 の n 要 素 構 造 体 )<br />
複 数 の n 要 素 構 造 体 をベ ク タ ロー ド 。 複 数 の n 要 素 構 造 体 を メ モ リ か ら 1 つま<br />
たは 複 数 の NEON レジスタにロード し、 インターリーブを 解 除 します (n ==<br />
1 の 場 合 を 除 き ます)。 各 レ ジ ス タ のすべての 要 素 が ロー ド さ れます。<br />
複 数 の n 要 素 構 造 体 をベ ク タ ス ト ア。 複 数 の n 要 素 構 造 体 を メ モ リ か ら 1 つま<br />
たは 複 数 の NEON レジスタにス トアし、 インターリーブします (n == 1 の 場<br />
合 を 除 きます)。 各 レジスタのすべての 要 素 がス ト アされます。<br />
構 文<br />
Vopn{cond}.datatype list, [Rn{@align}]{!}<br />
Vopn{cond}.datatype list, [Rn{@align}], Rm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
op<br />
n<br />
LD または ST を 指 定 し ます。<br />
1、 2、 3、 または 4 のいずれかにし ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
list<br />
Rn<br />
align<br />
オプシ ョ ンについては、 表 5-14 (ページ 5-94) を 参 照 して 下 さ<br />
い。<br />
NEON レジスタ リ ス ト を 指 定 します。 オプシ ョ ンについては、<br />
表 5-14 (ページ 5-94) を 参 照 して 下 さい。<br />
ベース ア ド レ ス を 保 持 する <strong>ARM</strong> レジスタです。 Rn を r15 にする<br />
ことはできません。<br />
オプシ ョ ンの 境 界 調 整 を 指 定 し ます。 オプシ ョ ンについては、<br />
表 5-14 (ページ 5-94) を 参 照 して 下 さい。<br />
! ! が 指 定 されている 場 合 、 Rn は (Rn + 命 令 に よ って 転 送 さ れるバ<br />
イト 数 ) に 更 新 されます。 更 新 は、 すべての ロー ド ま たはス ト ア<br />
が 実 行 された 後 に 行 われます。<br />
Rm<br />
ベース ア ド レ スか ら のオフセ ッ ト を 保 持 する <strong>ARM</strong> レジスタで<br />
す。 Rm が 指 定 されている 場 合 、 メ モ リ にア ク セスする ためにア ド<br />
レスが 使 用 された 後 で、Rn は (Rn + Rm) に 更 新 されます。 Rm に r13<br />
と r15 は 指 定 でき ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-93<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
表 5-14 パラ メ ー タの 有 効 な 組 み 合 わせ<br />
n datatype list a align b 境 界 調 整<br />
1 8、 16、 32、<br />
または 64<br />
{Dd} @64 8 バイ ト<br />
{Dd, D(d+1)} @64 または @128 8 バイ ト または 16 バイ<br />
ト<br />
{Dd, D(d+1), D(d+2)} @64 8 バイ ト<br />
{Dd, D(d+1), D(d+2), D(d+3)}<br />
@64、 @128、 また<br />
は @256<br />
8 バイ ト、 16 バイ ト、<br />
または 32 バイ ト<br />
2 8、 16、 また<br />
は 32<br />
{Dd, D(d+1)} @64, @128 8 バイ ト または 16 バイ<br />
ト<br />
{Dd, D(d+2)} @64, @128 8 バイ ト または 16 バイ<br />
ト<br />
{Dd, D(d+1), D(d+2), D(d+3)}<br />
@64、 @128、 また<br />
は @256<br />
8 バイ ト、 16 バイ ト、<br />
または 32 バイ ト<br />
3 8、 16、 また<br />
は 32<br />
{Dd, D(d+1), D(d+2)} @64 8 バイ ト<br />
{Dd, D(d+2), D(d+4)} @64 8 バイ ト<br />
4 8、 16、 また<br />
は 32<br />
{Dd, D(d+1), D(d+2), D(d+3)}<br />
@64、 @128、 また<br />
は @256<br />
8 バイ ト、 16 バイ ト、<br />
または 32 バイ ト<br />
{Dd, D(d+2), D(d+4), D(d+6)}<br />
@64、 @128、 また<br />
は @256<br />
8 バイ ト、 16 バイ ト、<br />
または 32 バイ ト<br />
a. 表 内 のすべてのレ ジ ス タは D0 ~ D31 の 範 囲 内 にあ る 必 要 があ り ます。<br />
b. Align は 省 略 でき ます。 省 略 し た 場 合 は、 標 準 の 境 界 調 整 ルールが 適 用 さ れます。 「ロード と ス<br />
ト ア 命 令 、 要 素 と 構 造 体 の 命 令 におけ る 境 界 調 整 の 制 約 」 (ページ 5-88) を 参 照 して 下 さい。<br />
5-94 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.13 NEON 疑 似 命 令 および VFP 疑 似 命 令<br />
こ のセ ク シ ョ ンは 以 下 のサブセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「VLDR 疑 似 命 令 」 (ページ 5-96) (NEON および VFP)<br />
• 「VLDR と VSTR (ポス ト イ ン ク リ メ ン ト と プレデク リ メ ン ト )」 (ページ<br />
5-97) (NEON および VFP)<br />
• 「VMOV2」 (ページ 5-99) (NEON のみ)<br />
• 「VAND および VORN (イ ミディエート)」 (ページ 5-100) (NEON のみ)<br />
• 「VACLE および VACLT」 (ページ 5-102) (NEON のみ)<br />
• 「VCLE および VCLT」 (ページ 5-103) (NEON のみ)<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-95<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.13.1 VLDR 疑 似 命 令<br />
VLDR 疑 似 命 令 は、 定 数 値 を 64 ビットの NEON ベク タ のすべての 要 素 、 ま たは<br />
VFP 単 精 度 / 倍 精 度 レ ジ ス タ に ロー ド し ます。<br />
注<br />
このセクションでは、VLDR 疑 似 命 令 についてのみ 説 明 し ます。 VLDR 命 令 につい<br />
ては、 「VLDR および VSTR」 (ページ 5-25) を 参 照 して 下 さい。<br />
構 文<br />
VLDR{cond}.datatype Dd,=constant<br />
VLDR{cond}.datatype Sd,=constant<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
datatype<br />
n<br />
以 下 のいずれかを 指 定 し ます。<br />
In NEON のみ<br />
Sn NEON のみ<br />
Un NEON のみ<br />
F32 NEON、 VFP<br />
F64 VFP のみ<br />
8、 16、 32、 または 64 のいずれかにし ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
Dd ??? Sd<br />
constant<br />
ロード 先 の 拡 張 レジスタを 指 定 します。<br />
datatype に 対 し て 適 切 な 型 の 定 数 を 指 定 し ます。<br />
使 用 法<br />
レ ジ ス タ に 定 数 を 直 接 生 成 で き る 命 令 ( 例 えば VMOV) が 使 用 可 能 な 場 合 は、<br />
アセンブラはそれを 使 用 します。 それ 以 外 の 場 合 は、 定 数 を 含 むダブルワー<br />
ドのリテラルプールエント リを 生 成 し、VLDR 命 令 を 使 用 して 定 数 をロード し<br />
ます。<br />
5-96 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.13.2 VLDR と VSTR (ポス ト イ ン ク リ メ ン ト と プレデク リ メ ン ト )<br />
ポス ト インク リ メン ト とプレデク リ メン ト を 行 う 拡 張 レジスタをロードまた<br />
はス ト アする 擬 似 命 令 。<br />
注<br />
ポス ト インク リ メン ト とプレデク リ メン トのない VLDR 命 令 と VSTR 命 令 につい<br />
ては、 「VLDR および VSTR」 (ページ 5-25) を 参 照 して 下 さい。<br />
構 文<br />
op{cond}{.size} Fd, [Rn], #offset<br />
op{cond}{.size} Fd, [Rn, #-offset]!<br />
; post-increment<br />
; pre-decrement<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
以 下 を 指 定 し ます。<br />
• VLDR - メモリから 拡 張 レジスタをロードします。<br />
• VSTR - 拡 張 レ ジ ス タ の 内 容 を メ モ リ にス ト ア し ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
size<br />
Fd<br />
Rn<br />
offset<br />
任 意 に 指 定 で き るデータ サ イ ズ 指 定 子 です。 Fd が 単 精 度 VFP レ<br />
ジスタの 場 合 は 32、 Fd が 倍 精 度 レジス タの 場 合 は 64 にします。<br />
ロー ド ま たは 保 存 する 拡 張 レ ジ ス タ を 指 定 し ます。 NEON 命 令 の<br />
場 合 は、 倍 精 度 (Dd) レ ジ ス タ であ る 必 要 があ り ます。 VFP 命 令<br />
の 場 合 は、 倍 精 度 (Dd) レ ジ ス タ か 単 精 度 (Sd) レジスタのいず<br />
れかであ る 必 要 があ り ます。<br />
転 送 用 のベース ア ド レ ス を 保 持 する <strong>ARM</strong> レジスタを 指 定 しま<br />
す。<br />
アセンブ リ 時 に 数 値 定 数 が 求 められる 数 値 式 であ る 必 要 があ り<br />
ます。 値 は Fd が 単 精 度 VFP レジスタの 場 合 は 4、Fd が 倍 精 度 レジ<br />
スタの 場 合 は 8 にします。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-97<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
使 用 法<br />
ポ ス ト イ ン ク リ メ ン ト 命 令 は、 転 送 後 にレ ジ ス タ 内 のベース ア ド レ ス をオフ<br />
セッ ト 値 の 分 だけインク リ メント します。 プレデク リ メン ト 命 令 は、 レジス<br />
タ 内 のベースアド レスをオフセッ ト 値 の 分 だけデク リ メ ン ト してから、 レジ<br />
ス タ 内 の 新 し いア ド レ ス を 使 用 し て 転 送 を 実 行 し ます。 こ れら の 擬 似 命 令 は、<br />
VLDM 命 令 ま たは VSTM 命 令 にアセンブル さ れます (「VLDM、 VSTM、 VPOP、<br />
VPUSH」 (ページ 5-27) を 参 照 )。<br />
5-98 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.13.3 VMOV2<br />
VMOV2 疑 似 命 令 は、 リ テ ラ ルプールか ら 値 を ロー ド せずに、 定 数 を 生 成 し、<br />
NEON ベ ク タ のすべての 要 素 に 配 置 し ます。 こ の 疑 似 命 令 は、 常 に 2 つの 命 令<br />
にアセンブルされます。<br />
VMOV2 は、 16 ビ ッ ト の 任 意 の 定 数 、 および 範 囲 が 制 限 さ れてい る 32 ビット と<br />
64 ビッ トの 定 数 を 生 成 できます。<br />
構 文<br />
VMOV2{cond}.datatype Qd, #constant<br />
VMOV2{cond}.datatype Dd, #constant<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
datatype<br />
以 下 のいずれかを 指 定 し ます。<br />
• I8、 I16、 I32、 または I64<br />
• S8、 S16、 S32、 または S64<br />
• U8、 U16、 U32、 または U64<br />
• F32<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
Qd ??? Dd<br />
constant<br />
ロー ド 先 の 拡 張 レ ジ ス タ を 指 定 し ます。<br />
datatype に 対 して 適 切 な 型 の 定 数 を 指 定 します。<br />
使 用 法<br />
VMOV2 は 通 常 、 VMOV 命 令 、 ま たは VMVN 命 令 にアセンブル さ れてか ら、 VBIC 命 令 、<br />
または VORR 命 令 が 続 き ます。 詳 細 については、 「VMOV、 VMVN (イ ミディ<br />
エー ト )」 (ページ 5-49) および 「VBIC および VORR (イ ミディエート)」<br />
(ページ 5-35) を 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-99<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.13.4 VAND および VORN (イ ミディ エート)<br />
VAND (ビ ッ ト 単 位 論 理 積 イ ミ デ ィ エー ト ) は、 デス テ ィ ネーシ ョ ンベ ク タ の<br />
各 要 素 を 取 得 し、 即 値 を 使 用 し てビ ッ ト 単 位 論 理 積 を 実 行 し、 デス テ ィ ネー<br />
ションベクタに 結 果 を 返 します。<br />
VORN (ビ ッ ト 単 位 否 定 論 理 和 イ ミ デ ィ エー ト ) は、 デス テ ィ ネーシ ョ ンベ ク<br />
タ の 各 要 素 を 取 得 し、 イ ミ デ ィ エー ト 定 数 を 使 用 し てビ ッ ト 単 位 論 理 和 補 数<br />
を 求 め、 デステ ィ ネーシ ョ ンベク タに 結 果 を 返 し ます。<br />
注<br />
逆 アセンブル 時 に、 こ れら の 疑 似 命 令 は、 相 補 イ ミ デ ィ エー ト 定 数 を 使 用 し<br />
て 対 応 する VBIC 命 令 と VORR 命 令 に 逆 アセンブル さ れます。<br />
構 文<br />
Vop{cond}.datatype Qd, #imm<br />
Vop{cond}.datatype Dd, #imm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
op<br />
cond<br />
datatype<br />
Qd ??? Dd<br />
imm<br />
VAND または VORN を 指 定 し ます。<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ<br />
5-13) を 参 照 )。<br />
I8、 I16、 I32、 または I64 のいずれかを 指 定 し ます。<br />
結 果 を 保 持 する NEON レジスタです。<br />
イミディエート 定 数 です。<br />
イミディエート 定 数<br />
datatype が I16 の 場 合 、 即 値 は 以 下 のいずれかの 形 式 を 取 る 必 要 があ り ます。<br />
• 0xFFXY<br />
• 0xXYFF<br />
datatype が I32 の 場 合 、 イ ミ デ ィ エー ト 定 数 は 以 下 のいずれかの 形 式 を 取 る 必<br />
要 があ り ます。<br />
• 0xFFFFFFXY<br />
• 0xFFFFXYFF<br />
5-100 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
• 0xFFXYFFFF<br />
• 0xXYFFFFFF<br />
詳 細 については、 「VBIC および VORR (イ ミディエート)」 (ページ 5-35) を<br />
参 照 し て 下 さ い。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-101<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.13.5 VACLE および VACLT<br />
ベ ク タ 絶 対 値 比 較 は、 ベ ク タ の 各 要 素 の 絶 対 値 を 取 得 し、 2 番 目 のベ ク タ の<br />
対 応 する 要 素 の 絶 対 値 と 比 較 し ます。 条 件 が True の 場 合 、 デステ ィ ネーシ ョ<br />
ンベ ク タ の 対 応 する 要 素 はすべて 1 に 設 定 されます。 それ 以 外 の 場 合 は、 すべ<br />
て 0 に 設 定 されます。<br />
注<br />
逆 アセンブル 時 に、 こ れら の 疑 似 命 令 は、 反 転 し たオペラ ン ド を 使 用 し て 対<br />
応 する VACGE 命 令 と VACGT 命 令 に 逆 アセンブル さ れます。<br />
構 文<br />
VACop{cond}.datatype {Qd}, Qn, Qm<br />
VACop{cond}.datatype {Dd}, Dn, Dm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
op<br />
以 下 のいずれかを 指 定 し ます。<br />
LE 以 下 ( 絶 対 値 )<br />
LT 未 満 ( 絶 対 値 )<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
Qd ??? Dd<br />
Qn ??? Dn<br />
Qm ??? Dm<br />
F32 にする 必 要 があ り ます。<br />
結 果 を 保 持 する NEON レジスタです。<br />
結 果 の datatype は I32 です。<br />
第 1 オペラ ン ド を 保 持 する NEON レジスタです。<br />
第 2 オペラ ン ド を 保 持 する NEON レジスタです。<br />
5-102 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.13.6 VCLE および VCLT<br />
ベクタ 比 較 はベクタの 各 要 素 の 値 を 取 得 し、 2 番 目 のベク タの 対 応 する 要 素<br />
の 値 または 0 と 比 較 します。 条 件 が True の 場 合 、 デステ ィ ネーシ ョ ンベク タ<br />
の 対 応 する 要 素 はすべて 1 に 設 定 されます。 それ 以 外 の 場 合 は、 すべて 0 に 設<br />
定 されます。<br />
注<br />
逆 アセンブル 時 に、 これらの 疑 似 命 令 は、 反 転 したオペランドを 使 用 して 対<br />
応 する VCGE 命 令 と VCGT 命 令 に 逆 アセンブル さ れます。<br />
構 文<br />
VCop{cond}.datatype {Qd}, Qn, Qm<br />
VCop{cond}.datatype {Dd}, Dn, Dm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
op<br />
以 下 のいずれかを 指 定 し ます。<br />
LE 小 さいか 等 しい<br />
LT 未 満<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
datatype<br />
Qd ??? Dd<br />
S8、 S16、 S32、 U8、 U16、 U32、 または F32 のいずれかにし ます。<br />
結 果 を 保 持 する NEON レジスタです。<br />
結 果 の datatype は 次 のよ う にな り ます。<br />
• オペラ ン ド のデータ 型 が I32、S32、U32、 または F32 の 場 合 は<br />
I32<br />
• オペラ ン ド のデータ 型 が I16、 S16、 または U16 の 場 合 は I16<br />
• オペラ ン ド のデータ 型 が I8、 S8、 または U8. の 場 合 は I8<br />
Qn ??? Dn<br />
Qm ??? Dm<br />
第 1 オペラ ン ド を 保 持 する NEON レジスタです。<br />
第 2 オペラ ン ド を 保 持 する NEON レジスタです。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-103<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.14 NEON / VFP システムレジスタ<br />
NEON と VFP のあらゆる 実 装 で、 以 下 の 3 つの NEON/VFP システムレジスタ<br />
にアクセスできます。<br />
• 「FPSCR : 浮 動 小 数 点 ス テータ ス / 制 御 レ ジ ス タ」<br />
• 「FPEXC : 浮 動 小 数 点 例 外 レ ジ ス タ」 (ページ 5-107)<br />
• 「FPSID : 浮 動 小 数 点 シ ス テム ID レジスタ」 (ページ 5-107)<br />
• 「NEON / VFP シ ス テム レ ジ ス タ の 各 ビ ッ ト の 変 更 」 (ページ 5-108)<br />
NEON または VFP の 一 部 の 実 装 では、 追 加 のレ ジ ス タ を 指 定 する こ と がで き<br />
ます ( 使 用 する VFP コプロセッサのテクニカルリ ファレンスマニュアルを 参<br />
照 して 下 さい)。<br />
5.14.1 FPSCR : 浮 動 小 数 点 ステー タ ス / 制 御 レ ジス タ<br />
FPSCR には、 ユーザレベルの NEON/VFP ステータス / 制 御 ビ ッ ト がすべて 保 持<br />
されています。 NEON はビッ ト [31:27] のみを 使 用 し ます。 ビットは 以 下 のよ<br />
うに 使 用 されます。<br />
ビッ ト [31:28] N、 Z、 C、 および V の 各 フ ラ グです。 これらは NEON / VFP ス<br />
テータ スフ ラグです。 これらのフラグを CPSR のステータスフラ<br />
グにコ ピーする までは、 こ れら を 使 用 し て 条 件 実 行 を 制 御 する<br />
ことはできません (「 条 件 コー ド 」 (ページ 5-13) を 参 照 )。<br />
ビッ ト [27] QC ( 累 積 サチ ュ レー ト ) フ ラ グです。 NEON サチュ レー ト 命 令<br />
でサチュ レーシ ョ ンが 発 生 し た 場 合 に 設 定 さ れます。<br />
ビッ ト [25] デフォル ト の NaN (DN) モー ド 制 御 ビ ッ ト です。<br />
0 無 効 。 NaN オペラ ン ド は 浮 動 小 数 点 演 算 の 出 力 にまで<br />
伝 播 し ます。<br />
1 有 効 。 NaN が 関 係 する 演 算 がデフ ォル ト の NaN を 返 し<br />
ます。<br />
注<br />
NEON は、 このビットに 関 係 なくデフォルトの NaN が 有 効 にさ<br />
れた 設 定 を 常 に 使 用 し ます。<br />
ビッ ト [24] ゼ ロ ク リ アモー ド 制 御 ビ ッ ト です。<br />
0 ゼロク リアモードは 無 効 になり ます。<br />
1 ゼロク リアモードは 有 効 になり ます。<br />
5-104 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
使 用 するハードウェアと ソフ ト ウェアによっては、 ゼロク リア<br />
モー ド を 使 用 する と 、 範 囲 情 報 が 失 われる 代 わ り にパフ ォーマ<br />
ンスが 向 上 します (「ゼロ ク リ アモード」 (ページ 5-109) を 参<br />
照 )。<br />
注<br />
NEON は、 こ のビ ッ ト に 関 係 な く ゼロ ク リ アモー ド を 常 に 使 用<br />
します。<br />
IEEE 754 と の 互 換 性 が 必 要 な 場 合 、 ゼ ロ ク リ アモー ド を 使 用 し<br />
ないで 下 さい。<br />
ビッ ト [23:22] 丸 めモー ド を 以 下 の よ う に 制 御 し ます。<br />
0b00 近 似 値 への 丸 め (RN) モード<br />
0b01 正 の 無 限 大 方 向 への 丸 め (RP) モード<br />
0b10 負 の 無 限 大 方 向 への 丸 め (RM) モード<br />
0b11 ゼ ロ 方 向 への 丸 め (RZ) モード<br />
注<br />
NEON は、 こ のビ ッ ト に 関 係 な く 近 似 値 への 丸 めモー ド を 常 に<br />
使 用 し ます。<br />
ビッ ト [21:20] STRIDE は、 ベ ク タ 内 で 連 続 する 値 の 間 の 距 離 です (「ベク タ」<br />
(ページ 5-125) を 参 照 )。 ス ト ラ イ ド は 以 下 の よ う に 制 御 さ れま<br />
す。<br />
0b00 STRIDE = 1<br />
0b11 STRIDE = 2<br />
ビッ ト [18:16] LEN は、 各 ベク タによ って 使 用 される レジス タの 数 です (「ベ ク<br />
タ」 (ページ 5-125) を 参 照 )。 1 + ビット [18:16] の 値 にな り ます。<br />
0b000 LEN = 1<br />
...<br />
0b111 LEN = 8<br />
ビッ ト [15, 12:8] 例 外 の ト ラ ッ プ イ ネーブルビ ッ ト です。<br />
IDE 入 力 非 正 規 例 外 イ ネーブル<br />
IXE 不 正 確 例 外 イ ネーブル<br />
UFE アンダーフロー 例 外 イネーブル<br />
OFE オーバーフ ロー 例 外 イネーブル<br />
DZE ゼ ロ 除 算 例 外 イ ネーブル<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-105<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
IOE 無 効 演 算 例 外 イ ネーブル<br />
本 書 では、 浮 動 小 数 点 例 外 ト ラ ッ プの 使 用 について 説 明 し ませ<br />
ん。 詳 細 については、 使 用 し てい る VFP コプロセッサのテクニカ<br />
ルリファレンスマニュアルを 参 照 して 下 さい。<br />
ビッ ト [7, 4:0] 累 積 例 外 ビ ッ ト です。<br />
IDC 入 力 非 正 規 例 外<br />
IXC 不 正 確 例 外<br />
UFC アンダーフ ロー 例 外<br />
OFC オーバーフ ロー 例 外<br />
DZC ゼ ロ 除 算 例 外<br />
IOC 無 効 演 算 例 外<br />
累 積 例 外 ビ ッ ト は、 対 応 する 例 外 が 発 生 する と 設 定 さ れます。 こ<br />
れらの 例 外 ビッ トは、FPSCR への 直 接 の 書 き 込 みによ って ク リ ア<br />
さ れる まで、 設 定 さ れた ま ま と な り ます。<br />
その 他 すべてのビ ッ ト 基 本 的 な NEON / VFP 仕 様 では 使 用 さ れません。 これら<br />
のビ ッ ト は 特 定 の 実 装 で 使 用 でき ます ( 使 用 し ている VFP コプ<br />
ロセッサのテクニカルリ ファレンスマニュアルを 参 照 して 下 さ<br />
い)。 特 定 の 実 装 で 使 用 さ れてい る 場 合 を 除 き、 こ れ ら のビ ッ ト<br />
を 変 更 しないで 下 さい。<br />
他 のビ ッ ト に 影 響 を 及 ぼすこ とな く 一 部 のビ ッ ト だけを 変 更 するには、 読 み<br />
出 し - 変 更 - 書 き 込 みプロシージャを 使 用 します (「NEON / VFP システムレジ<br />
スタの 各 ビッ トの 変 更 」 (ページ 5-108) を 参 照 )。<br />
注<br />
ベクタモードの 使 用 は 廃 止 される 予 定 です。 LEN と STRIDE を 1 に 設 定 し ます。<br />
5-106 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.14.2 FPEXC : 浮 動 小 数 点 例 外 レジス タ<br />
FPEXC には、 特 権 モード でのみア クセスでき ます。 FPEXC には 以 下 のビ ッ ト が<br />
保 持 さ れます。<br />
ビッ ト [31] EX ビットです。 NEON / VFP のあ ら ゆ る 実 装 で 読 み 出 すこ と がで<br />
きます。 一 部 の 実 装 では、 こ のビ ッ ト への 書 き 込 みが 可 能 な 場 合<br />
もあります。<br />
値 が 0 の 場 合 、 NEON/VFP システムは、 汎 用 レジスタの 内 容 に<br />
FPSCR および FPEXC を 加 えた 状 態 にな り ます。<br />
値 が 1 の 場 合 は、 状 態 を 保 存 するには 実 装 固 有 の 情 報 が 必 要 と な<br />
ります ( 使 用 している VFP コプロセッサのテクニカルリ ファレ<br />
ン ス マニ ュ アルを 参 照 し て 下 さ い)。<br />
ビッ ト [30] EN ビットです。 NEON / VFP のあらゆる 実 装 で 読 み 出 し と 書 き 込<br />
みが 可 能 です。<br />
値 が 1 で、 NEON と VFP が 存 在 する 場 合 、 こ れらは 有 効 にな り 、<br />
正 常 に 動 作 し ます。<br />
値 が 0 の 場 合 、NEON と VFP は 無 効 にな り ます。 無 効 にな ってい<br />
る 場 合 、FPSID レジスタまたは FPEXC レ ジ ス タ の 読 み 出 しや 書 き 込<br />
みを 行 う こ とはできますが、 他 の NEON / VFP 命 令 は 未 定 義 命 令<br />
として 処 理 されます。<br />
ビッ ト [29:0] VFP の 特 定 の 実 装 で 使 用 さ れる 場 合 があ り ます。 本 章 で 説 明 す<br />
るすべての VFP 機 能 は、 こ れ ら のビ ッ ト にア ク セ ス し な く て も<br />
使 用 で き ます。<br />
特 定 の 実 装 で 使 用 さ れてい る 場 合 を 除 き、 こ れら のビ ッ ト を 変<br />
更 しないで 下 さい ( 使 用 している VFP コプロセッサのテクニカ<br />
ルリファレンスマニュアルを 参 照 して 下 さい)。<br />
他 のビ ッ ト に 影 響 を 及 ぼすこ と な く 一 部 のビ ッ ト だけを 変 更 するには、 読 み<br />
出 し - 変 更 - 書 き 込 みプロシージャを 使 用 します (「NEON / VFP システムレジ<br />
スタの 各 ビッ トの 変 更 」 (ページ 5-108) を 参 照 )。<br />
5.14.3 FPSID : 浮 動 小 数 点 システム ID レジスタ<br />
FPSID は、 読 み 出 し 専 用 のレ ジ ス タ です。 こ のレ ジ ス タ を 読 み 出 す と 、 使 用 し<br />
ているプログラムが 動 作 中 の NEON / VFP アーキテクチャの 実 装 を 確 認 でき<br />
ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-107<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.14.4 NEON / VFP システムレ ジス タの 各 ビ ッ ト の 変 更<br />
他 のビ ッ ト に 影 響 を 及 ぼすこ とな く NEON / VFP システムレジスタの 一 部 の<br />
ビ ッ ト だけを 変 更 する には、 以 下 の 例 に 示 すよ う な 読 み 出 し - 変 更 - 書 き 込 み<br />
プロシージャを 使 用 します。<br />
VMRS r10,FPSCR ; copy FPSCR into r10<br />
BIC r10,r10,#0x00370000 ; clears STRIDE and LEN<br />
ORR r10,r10,#0x00030000 ; sets STRIDE = 1, LEN = 4<br />
VMSR FPSCR,r10 ; copy r10 back into FPSCR<br />
詳 細 については、 「VMRS および VMSR」 (ページ 5-32) を 参 照 して 下 さい。<br />
5-108 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.15 ゼロク リアモード<br />
VFP の 一 部 の 実 装 では、 非 正 規 化 数 を 処 理 する ためのサポー ト コー ド が 使 用<br />
されます。 これら のシ ス テムでは、 非 正 規 化 数 を 計 算 する 際 のパフ ォーマン<br />
スは、 正 規 計 算 を 行 う 場 合 よ り 大 き く 低 下 し ます。<br />
ゼ ロ フ ラ ッ シ ュ モー ド では、 非 正 規 化 数 が 0 に 置 換 さ れます。 こ の 処 理 は<br />
IEEE 754 で 定 義 さ れてい る 演 算 に 準 拠 し ていませんが、 状 況 に よ っ てはパ<br />
フォーマンスを 著 しく 向 上 させることができます。<br />
NEON と VFPv3 のゼ ロ ク リ アでは 符 号 ビ ッ ト が 維 持 さ れ、 VFPv2 のゼロ ク リ<br />
アでは +0 にク リアされます。<br />
NEON では、 ゼロ ク リ アモード を 常 に 使 用 し ます。<br />
5.15.1 ゼロク リアモード をいつ 使 用 すべきか<br />
以 下 の 条 件 がすべて 該 当 する 場 合 は、 ゼ ロ ク リ アモー ド を 選 択 し て 下 さ い。<br />
• IEEE 754 への 準 拠 がシステム 要 件 ではない。<br />
• 使 用 し てい る アルゴ リ ズムに よ って 非 正 規 化 数 が 生 成 さ れる 場 合 があ<br />
る。<br />
• 使 用 し てい る シ ス テムで 非 正 規 化 数 を 処 理 する サポー ト コー ド が 使 用 さ<br />
れている。<br />
• 使 用 し てい る アルゴ リ ズムが 保 存 さ れる 非 正 規 化 数 の 正 確 さ に 依 存 し な<br />
い。<br />
• 非 正 規 化 数 を 0 に 置 換 し た 結 果 、 使 用 し てい る アルゴ リ ズムで 例 外 が 頻<br />
繁 に 生 成 されない<br />
コード の 各 部 で 要 件 が 異 なる 場 合 は、 ゼロ ク リ アモード と 標 準 モード をいつ<br />
でも 切 り 替 えることができます。 モード を 切 り 替 えて も、 レジス タに 既 に 格<br />
納 されている 数 値 は 影 響 を 受 けません。<br />
5.15.2 ゼロ ク リ アモー ド の 使 用 によ る 影 響<br />
一 部 の 例 外 を 除 き (「ゼ ロ ク リ アモー ド の 影 響 を 受 けない 演 算 」 (ページ<br />
5-110) を 参 照 )、 ゼ ロ ク リ アモー ド を 使 用 する と 、 浮 動 小 数 点 演 算 に 以 下 の<br />
ような 影 響 があります。<br />
• 非 正 規 化 数 が 浮 動 小 数 点 演 算 への 入 力 と し て 使 用 さ れる と き、 こ の 非 正<br />
規 化 数 は 0 として 処 理 されます。 ソースレジスタは 変 更 されません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-109<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
• 単 精 度 浮 動 小 数 点 演 算 の 丸 め 前 の 結 果 が –2 –126 ~ +2 –126 の 範 囲 にあ る 場<br />
合 、 こ の 結 果 は 0 に 置 換 されます。<br />
• 倍 精 度 浮 動 小 数 点 演 算 の 丸 め 前 の 結 果 が –2 –1022 ~ +2 –1022 の 範 囲 にあ る<br />
場 合 、 こ の 結 果 は 0 に 置 換 されます。<br />
非 正 規 化 数 がオペラ ン ド と し て 使 用 さ れる と 不 正 確 例 外 が 発 生 する か、 結 果<br />
がゼロにク リ アされます。 アンダーフ ロー 例 外 はゼ ロ ク リ アモー ド では 発 生<br />
しません。<br />
5.15.3 ゼロ ク リ アモー ド の 影 響 を 受 けない 演 算<br />
以 下 の NEON 演 算 と VFP 演 算 は、 ゼ ロ ク リ アモー ド において も 結 果 をゼ ロ に<br />
ク リ アする こ と な く 非 正 規 化 数 に 対 し て 実 行 で き ます。<br />
• コ ピー、 絶 対 値 、 および 否 定 (「VMOV、 VMVN (レジスタ)」 (ページ<br />
5-38) , 「VABS、 VNEG、 VSQRT」 (ページ 5-112) および 「V{Q}ABS お<br />
よび V{Q}NEG」 (ページ 5-67) を 参 照 )。<br />
• 複 製 (「VDUP」 (ページ 5-47) を 参 照 )。<br />
• スワップ (「VSWP」 (ページ 5-53) を 参 照 )。<br />
• ロードおよびス ト ア (「VLDR および VSTR」 (ページ 5-25) を 参 照 )。<br />
• 多 重 ロー ド および 多 重 ス ト ア (「VLDM、 VSTM、 VPOP、 VPUSH」 (ペー<br />
ジ 5-27) を 参 照 )。<br />
• 拡 張 レ ジ ス タ と <strong>ARM</strong> 汎 用 レ ジ ス タ 間 の 転 送 (「VMOV (2 本 の <strong>ARM</strong> レジ<br />
スタと 拡 張 レジスタ 間 )」 (ページ 5-29)、 「VMOV (<strong>ARM</strong> レジスタと<br />
NEON スカラの 間 )」 (ページ 5-30)、 および 「VMOV (1 本 の <strong>ARM</strong> レジ<br />
スタと 単 精 度 VFP の 間 )」 (ページ 5-31) を 参 照 )。<br />
5-110 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.16 VFP 命 令<br />
こ のセ ク シ ョ ンは 以 下 のサブセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「VABS、 VNEG、 VSQRT」 (ページ 5-112)<br />
浮 動 小 数 点 絶 対 値 、 否 定 、 および 平 方 根<br />
• 「VADD、 VSUB、 VDIV」 (ページ 5-113)<br />
浮 動 小 数 点 加 算 、 減 算 および 除 算<br />
• 「VMUL、 VMLA、 VMLS、 VNMUL、 VNMLA、 VNMLS」 (ページ 5-114)<br />
必 要 に 応 じ て 否 定 を 伴 う 浮 動 小 数 点 乗 算 および 積 和<br />
• 「VCMP」 (ページ 5-116)<br />
浮 動 小 数 点 比 較<br />
• 「VCVT ( 単 精 度 と 倍 精 度 の 間 )」 (ページ 5-117)<br />
単 精 度 と 倍 精 度 間 の 変 換<br />
• 「VCVT ( 浮 動 小 数 点 と 整 数 間 の 変 換 )」 (ページ 5-118)<br />
浮 動 小 数 点 と 整 数 間 の 変 換<br />
• 「VCVT ( 浮 動 小 数 点 と 固 定 小 数 点 間 )」 (ページ 5-119)<br />
浮 動 小 数 点 と 固 定 小 数 点 間 の 変 換<br />
• 「VCVTB、 VCVTT ( 半 精 度 拡 張 )」 (ページ 5-121)<br />
半 精 度 浮 動 小 数 点 数 と 単 精 度 浮 動 小 数 点 数 間 の 変 換<br />
• 「VMOV」 (ページ 5-122)<br />
単 精 度 ま たは 倍 精 度 レ ジ ス タへの 浮 動 小 数 点 定 数 の 挿 入<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-111<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.16.1 VABS、 VNEG、 VSQRT<br />
浮 動 小 数 点 絶 対 値 、 否 定 、 および 平 方 根<br />
こ れら の 命 令 では、 ス カ ラ、 ベ ク タ、 ま たは 混 合 演 算 を 実 行 で き ます (「VFP<br />
ベクタ 演 算 とスカラ 演 算 」 (ページ 5-126) を 参 照 )。<br />
構 文<br />
Vop{cond}.F32 Sd, Sm<br />
Vop{cond}.F64 Dd, Dm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
op<br />
ABS、 NEG、 または SQRT のいずれかを 指 定 し ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
Sd, Sm<br />
Dd, Dm<br />
結 果 と オペラ ン ド を 保 持 する 単 精 度 レ ジ ス タ です。<br />
結 果 と オペラ ン ド を 保 持 する 倍 精 度 レ ジ ス タ です。<br />
使 用 法<br />
VABS 命 令 は、 Sm または Dm の 内 容 を 取 得 し、 符 号 ビ ッ ト を ク リ ア し て、 その 結<br />
果 を Sd または Dd に 返 し ます。 こ れに よ り 、 絶 対 値 が 得 られます。<br />
VNEG 命 令 は、 Sm または Dm の 内 容 を 取 得 し、 符 号 ビ ッ ト を 変 更 し て、 その 結 果<br />
を Sd または Dd に 返 し ます。 これに よ り 、 値 の 否 定 が 得 ら れます。<br />
VSQRT 命 令 は、 Sm または Dm の 内 容 の 値 の 平 方 根 を 計 算 し、 その 結 果 を Sd また<br />
は Dd に 返 し ます。<br />
VABS 命 令 と VNEG 命 令 では、 オペラ ン ド が NaN の 場 合 、 符 号 ビ ッ ト は 上 記 の 各<br />
ケース で 決 定 さ れますが、 例 外 は 生 成 さ れません。<br />
浮 動 小 数 点 の 例 外<br />
VABS 命 令 と VNEG 命 令 に よ って、 例 外 が 生 成 さ れる こ と はあ り ません。<br />
VSQRT 命 令 は、 無 効 演 算 例 外 ま たは 不 正 確 例 外 を 生 成 する 場 合 があ り ます。<br />
5-112 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.16.2 VADD、 VSUB、 VDIV<br />
浮 動 小 数 点 加 算 、 減 算 および 除 算<br />
こ れら の 命 令 では、 ス カ ラ、 ベ ク タ、 ま たは 混 合 演 算 を 実 行 で き ます (「VFP<br />
ベ ク タ 演 算 と ス カ ラ 演 算 」 (ページ 5-126) を 参 照 )。<br />
構 文<br />
Vop{cond}.F32 {Sd}, Sn, Sm<br />
Vop{cond}.F64 {Dd}, Dn, Dm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
op<br />
ADD、 SUB、 または DIV のいずれかを 指 定 し ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
Sd, Sn, Sm<br />
Dd, Dn, Dm<br />
結 果 と オペラ ン ド を 保 持 する 単 精 度 レ ジ ス タ です。<br />
結 果 と オペラ ン ド を 保 持 する 倍 精 度 レ ジ ス タ です。<br />
使 用 法<br />
VADD 命 令 は、 オペラ ン ド レ ジ ス タ の 値 を 加 算 し て、 その 結 果 をデス テ ィ ネー<br />
ションレジスタに 返 します。<br />
VSUB 命 令 は、 第 2 オペラ ン ド レジス タの 値 を 第 1 オペラ ン ド レジス タの 値 か<br />
ら 減 算 し、 その 結 果 をデスティネーシ ョ ンレジスタに 返 します。<br />
VDIV 命 令 は、 第 1 オペラ ン ド レジス タの 値 を 第 2 オペラ ン ド レジス タの 値 で<br />
除 算 し、 その 結 果 をデス テ ィ ネーシ ョ ン レ ジ ス タ に 返 し ます。<br />
浮 動 小 数 点 の 例 外<br />
VADD 命 令 と VSUB 命 令 は、 無 効 演 算 例 外 、 オーバーフ ロー 例 外 、 ま たは 不 正 確<br />
例 外 を 生 成 する 場 合 があ り ます。<br />
VDIV 演 算 は、 ゼ ロ 除 算 例 外 、 無 効 演 算 例 外 、 オーバーフ ロー 例 外 、 アンダー<br />
フ ロー 例 外 、 ま たは 不 正 確 例 外 を 生 成 する 場 合 があ り ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-113<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.16.3 VMUL、 VMLA、 VMLS、 VNMUL、 VNMLA、 VNMLS<br />
必 要 に 応 じ て 否 定 を 伴 う 浮 動 小 数 点 乗 算 および 積 和<br />
こ れら の 命 令 では、 ス カ ラ、 ベ ク タ、 ま たは 混 合 演 算 を 実 行 で き ます (「VFP<br />
ベクタ 演 算 とスカラ 演 算 」 (ページ 5-126) を 参 照 )。<br />
構 文<br />
V{N}MUL{cond}.F32 {Sd,} Sn, Sm<br />
V{N}MUL{cond}.F64 {Dd,} Dn, Dm<br />
V{N}MLA{cond}.F32 Sd, Sn, Sm<br />
V{N}MLA{cond}.F64 Dd, Dn, Dm<br />
V{N}MLS{cond}.F32 Sd, Sn, Sm<br />
V{N}MLS{cond}.F64 Dd, Dn, Dm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
N<br />
最 終 結 果 を 否 定 し ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
Sd, Sn, Sm<br />
Dd, Dn, Dm<br />
結 果 と オペラ ン ド を 保 持 する 単 精 度 レ ジ ス タ です。<br />
結 果 と オペラ ン ド を 保 持 する 倍 精 度 レ ジ ス タ です。<br />
使 用 法<br />
MUL 演 算 は、 オペラ ン ド レ ジ ス タ の 値 を 乗 算 し、 その 結 果 をデス テ ィ ネーシ ョ<br />
ンレジスタに 返 します。<br />
MLA 演 算 は、 オペラ ン ド レ ジ ス タ の 値 を 乗 算 し、 デス テ ィ ネーシ ョ ン レ ジ ス タ<br />
の 値 を 加 算 し、 その 最 終 結 果 をデステ ィ ネーシ ョ ンレジス タに 返 し ます。<br />
MLS 演 算 は、 オペラ ン ド レ ジ ス タ の 値 を 乗 算 し、 その 結 果 値 をデス テ ィ ネー<br />
ションレジスタの 値 から 減 算 し、 最 終 結 果 をデスティネーションレジスタに<br />
返 します。<br />
いずれの 場 合 も、 N オプシ ョ ン を 使 用 する と 最 終 結 果 は 否 定 さ れます。<br />
5-114 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
浮 動 小 数 点 の 例 外<br />
命 令 は、 無 効 演 算 例 外 、 オーバーフ ロー 例 外 、 アンダーフ ロー 例 外 、 不 正 確<br />
例 外 、 入 力 非 正 規 例 外 を 生 成 する 場 合 があ り ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-115<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.16.4 VCMP<br />
浮 動 小 数 点 比 較<br />
VCMP では 常 にスカ ラ 演 算 が 実 行 されます。<br />
構 文<br />
VCMP{cond}.F32 Sd, Sm<br />
VCMP{cond}.F32 Sd, #0<br />
VCMP{cond}.F64 Dd, Dm<br />
VCMP{cond}.F64 Dd, #0<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
Sd, Sm<br />
Dd, Dm<br />
オペラ ン ド を 保 持 する 単 精 度 レ ジ ス タ です。<br />
オペラ ン ド を 保 持 する 倍 精 度 レ ジ ス タ を 指 定 し ます。<br />
使 用 法<br />
VCMP 命 令 は、 第 2 オペラ ン ド レジス タの 値 ( 第 2 オペラ ン ド が #0 の 場 合 は 0)<br />
を 第 1 オペラ ン ド レジス タの 値 から 減 算 し、 その 結 果 に VFP 条 件 フ ラ グ を 設<br />
定 します (「 条 件 コー ド 」 (ページ 5-13) を 参 照 )。<br />
浮 動 小 数 点 の 例 外<br />
VCMP 命 令 は、 無 効 演 算 例 外 を 生 成 する こ と があ り ます。<br />
5-116 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.16.5 VCVT ( 単 精 度 と 倍 精 度 の 間 )<br />
単 精 度 数 値 と 倍 精 度 数 値 間 の 変 換 を 実 行 し ます。<br />
VCVT では 常 にスカ ラ 演 算 が 実 行 されます。<br />
構 文<br />
VCVT{cond}.F64.F32 Dd, Sm<br />
VCVT{cond}.F32.F64 Sd, Dm<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
Dd 結 果 を 保 持 する 倍 精 度 レ ジ ス タ です。<br />
Sm オペラ ン ド を 保 持 する 単 精 度 レ ジ ス タ です。<br />
Sd 結 果 を 保 持 する 単 精 度 レ ジ ス タ です。<br />
Dm オペラ ン ド を 保 持 する 倍 精 度 レ ジ ス タ です。<br />
使 用 法<br />
これらの 命 令 は Sm の 単 精 度 値 を 倍 精 度 に 変 換 し、 その 結 果 を Dd に 返 すか、 Dm<br />
の 倍 精 度 値 を 単 制 度 に 変 換 し、 その 結 果 を Sd に 返 し ます。<br />
浮 動 小 数 点 の 例 外<br />
命 令 は、 無 効 演 算 例 外 、 入 力 非 正 規 例 外 、 オーバーフ ロー 例 外 、 アンダーフ<br />
ロー 例 外 、 ま たは 不 正 確 例 外 を 生 成 する 場 合 があ り ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-117<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.16.6 VCVT ( 浮 動 小 数 点 と 整 数 間 の 変 換 )<br />
浮 動 小 数 点 数 と 整 数 間 の 変 換 を 実 行 し ます。<br />
VCVT では 常 にスカ ラ 演 算 が 実 行 されます。<br />
構 文<br />
VCVT{R}{cond}.type.F64 Sd, Dm<br />
VCVT{R}{cond}.type.F32 Sd, Sm<br />
VCVT{cond}.F64.type Dd, Sm<br />
VCVT{cond}.F32.type Sd, Sm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
R<br />
FPSCR で 指 定 されている 丸 めモード を 演 算 で 使 用 する こ と を 指<br />
定 します。 それ 以 外 の 場 合 は、 0 に 丸 めます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
type<br />
Sd<br />
Dd<br />
Sm<br />
Dm<br />
U32 ( 符 号 な し 32 ビット 整 数 ) または S32 ( 符 号 付 き 32 ビッ ト 整<br />
数 ) を 指 定 で き ます。<br />
結 果 を 保 持 する 単 精 度 レ ジ ス タ です。<br />
結 果 を 保 持 する 倍 精 度 レ ジ ス タ です。<br />
オペラ ン ド を 保 持 する 単 精 度 レ ジ ス タ です。<br />
オペラ ン ド を 保 持 する 倍 精 度 レ ジ ス タ です。<br />
使 用 法<br />
この 命 令 の 最 初 の 2 つの 形 式 は 浮 動 小 数 点 か ら 整 数 への 変 換 を 実 行 し ます。<br />
3 番 目 と 4 番 目 の 形 式 は 整 数 か ら 浮 動 小 数 点 への 変 換 を 実 行 し ます。<br />
浮 動 小 数 点 の 例 外<br />
こ れら の 命 令 は、 入 力 非 正 規 例 外 、 無 効 演 算 例 外 、 ま たは 不 正 確 例 外 を 生 成<br />
する 場 合 があ り ます。<br />
5-118 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.16.7 VCVT ( 浮 動 小 数 点 と 固 定 小 数 点 間 )<br />
浮 動 小 数 点 値 と 固 定 小 数 点 値 間 の 変 換 を 実 行 し ます。<br />
VCVT では 常 にスカ ラ 演 算 が 実 行 されます。<br />
構 文<br />
VCVT{cond}.type.F64 Dd, Dd, #fbits<br />
VCVT{cond}.type.F32 Sd, Sd, #fbits<br />
VCVT{cond}.F64.type Dd, Dd, #fbits<br />
VCVT{cond}.F32.type Sd, Sd, #fbits<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
type<br />
Sd<br />
Dd<br />
fbits<br />
次 のいずれかを 指 定 でき ます。<br />
S16 16 ビ ッ ト の 符 号 付 き 固 定 小 数 点 値<br />
U16<br />
S32<br />
U32<br />
16 ビ ッ ト の 符 号 な し 固 定 小 数 点 値<br />
32 ビ ッ ト の 符 号 付 き 固 定 小 数 点 値<br />
32 ビ ッ ト の 符 号 な し 固 定 小 数 点 値<br />
オペラ ン ド と 結 果 を 保 持 する 単 精 度 レ ジ ス タ です。<br />
オペラ ン ド と 結 果 を 保 持 する 倍 精 度 レ ジ ス タ です。<br />
固 定 小 数 点 数 の 小 数 部 ビ ッ ト を 指 定 し ます。 type が S16 または<br />
U16 の 場 合 は 0 ~ 16 の 範 囲 、 type が S32 または U32 の 場 合 は 1 ~<br />
32 の 範 囲 です。<br />
使 用 法<br />
この 命 令 の 最 初 の 2 つの 形 式 は 浮 動 小 数 点 か ら 固 定 小 数 点 への 変 換 を 実 行 し<br />
ます。<br />
3 番 目 と 4 番 目 の 形 式 は 固 定 小 数 点 か ら 浮 動 小 数 点 への 変 換 を 実 行 し ます。<br />
いずれの 場 合 も、 固 定 小 数 点 値 は、 レ ジ ス タ の 最 下 位 の 16 または 32 ビッ ト<br />
に 含 まれます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-119<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
浮 動 小 数 点 の 例 外<br />
こ れら の 命 令 は、 入 力 非 正 規 例 外 、 無 効 演 算 例 外 、 ま たは 不 正 確 例 外 を 生 成<br />
する 場 合 があ り ます。<br />
5-120 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.16.8 VCVTB、 VCVTT ( 半 精 度 拡 張 )<br />
半 精 度 浮 動 小 数 点 数 と 単 精 度 浮 動 小 数 点 数 を 以 下 の 方 法 で 相 互 変 換 し ます。<br />
• VCVTB はシングルワード レジスタの 下 位 ビ ッ ト (ビ ッ ト [15:0]) を 使 用 し<br />
て、 半 精 度 値 の 取 得 ま たはス ト ア を 行 います。<br />
• VCVTT はシングルワード レジスタの 上 位 ビ ッ ト (ビ ッ ト [31:16]) を 使 用<br />
し て、 半 精 度 値 の 取 得 ま たはス ト アを 行 います。<br />
VCVTB と VCVTT では、 常 にス カ ラ 演 算 が 実 行 さ れます。<br />
構 文<br />
VCVTB{cond}.type Sd, Sm<br />
VCVTT{cond}.type Sd, Sm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
type<br />
Sd<br />
Sm<br />
次 のいずれかを 指 定 でき ます。<br />
F32.F16 半 精 度 か ら 単 精 度 への 変 換<br />
F16.F32 単 精 度 か ら 半 精 度 への 変 換<br />
結 果 を 保 持 する シングルワー ド レ ジ ス タ です。<br />
オペラ ン ド を 保 持 するシングルワード レジス タです。<br />
アーキテクチャ<br />
こ れら の 命 令 を 使 用 で き る のは、 半 精 度 拡 張 をサポー ト し てい る VFPv3 シス<br />
テムだけです。<br />
浮 動 小 数 点 の 例 外<br />
命 令 は、 入 力 非 正 規 例 外 、 無 効 演 算 例 外 、 オーバーフ ロー 例 外 、 アンダーフ<br />
ロー 例 外 、 ま たは 不 正 確 例 外 を 生 成 する 場 合 があ り ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-121<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.16.9 VMOV<br />
単 精 度 ま たは 倍 精 度 レ ジ ス タ に 浮 動 小 数 点 定 数 を 挿 入 する か、 1 つのレジス<br />
タを 別 のレジスタにコピーします。<br />
こ の 命 令 では 常 にス カ ラ 演 算 が 実 行 されます。<br />
構 文<br />
VMOV{cond}.F32 Sd, #imm<br />
VMOV{cond}.F64 Dd, #imm<br />
VMOV{cond}.F32 Sd, Sm<br />
VMOV{cond}.F64 Dd, Dm<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
cond 任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 コー ド 」 (ページ 5-13)<br />
を 参 照 )。<br />
Sd<br />
Dd<br />
imm<br />
Sm<br />
Dm<br />
単 精 度 デス テ ィ ネーシ ョ ン レ ジ ス タ を 指 定 し ます。<br />
倍 精 度 デス テ ィ ネーシ ョ ン レ ジ ス タ を 指 定 し ます。<br />
浮 動 小 数 点 定 数 です。<br />
単 精 度 ソ ース レ ジ ス タ を 指 定 し ます。<br />
倍 精 度 ソ ース レ ジ ス タ を 指 定 し ます。<br />
定 数 値<br />
+/–n * 2 –r と 表 すことができる 任 意 の 数 値 。 ここで、 n と r は 整 数 、<br />
16
NEON と VFP プログラ ミング<br />
5.17 VFP ベクタモード<br />
ベ ク タ では 大 半 の 算 術 命 令 を 使 用 で き、 単 一 命 令 複 数 データ 処 理 (SIMD) に<br />
よ る 並 列 処 理 が 可 能 にな り ます。 ま た、 浮 動 小 数 点 ロー ド / ス トア 命 令 には 複<br />
数 のレジスタ 形 式 があり、 ベクタをメモリ との 間 で 転 送 できます。<br />
VFP コプロセ ッ サの 詳 細 については、 『<strong>ARM</strong> アーキテクチャ リ フ ァ レンスマ<br />
ニュアル』 を 参 照 して 下 さい。<br />
注<br />
VFP ベクタモードの 使 用 は 廃 止 される 予 定 です<br />
5.17.1 レジスタバンク<br />
VFP レジスタは 次 のよ うに 並 んでいます。<br />
• 8 本 の 単 精 度 レ ジ ス タ か ら な る 4 つのバン ク (s0 ~ s7、 s8 ~ s15、 s16 ~<br />
s23、 および s24 ~ s31)<br />
• 4 本 の 倍 精 度 レ ジ ス タ か ら な る 8 つ (VFPv2 では 4 つ) のバン ク (d0 ~<br />
d3、 d4 ~ d7、 d8 ~ d11、 d12 ~ d15、 d16 ~ d19、 d20 ~ d23、 d24 ~<br />
d27、 および d28 ~ d31)<br />
• 単 精 度 レ ジ ス タ と 倍 精 度 レ ジ ス タ の 任 意 の 組 み 合 わせ<br />
詳 細 については、 図 5-9 および 図 5-10 (ページ 5-124) を 参 照 して 下 さい。<br />
s0 s1 s2 s3 s4 s5 s6 s7 s8 ... s15 s16 ... s23 s24 ... s31<br />
d0 d1 d2 d3 d4 ... d7 d8 ... d11 d12 ... d15<br />
Bank 0 Bank 1 Bank 2 Bank 3<br />
図 5-9 VFPv2 レジスタバンク<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-123<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
s0 s1 s2 s3 s4 s5 s6 s7 s8 s31<br />
...<br />
...<br />
d0 d1 d2 d3 d4 d15 d16 d27 d28 ...<br />
d31<br />
Bank 0 Bank 1 Bank 3<br />
Bank 4 Bank 6<br />
Bank 7<br />
図 5-10 VFPv3 レジスタバンク<br />
5-124 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.17.2 ベクタ<br />
ベクタには、 同 じバンクから、 最 大 8 本 の 単 精 度 レ ジ ス タ ま たは 最 大 4 本 の<br />
倍 精 度 レ ジ ス タ を 使 用 で き ます。 ベクタによって 使 用 されるレジスタの 数 は、<br />
FPSCR の LEN ビットによって 制 御 されます (「FPSCR : 浮 動 小 数 点 ス テータ ス /<br />
制 御 レ ジ ス タ」 (ページ 5-104) を 参 照 )。<br />
ベクタはどのレジスタからでも 開 始 できます。 ベクタによって 使 用 される 最<br />
初 のレジス タは、 各 命 令 のレジス タ フ ィ ール ド で 指 定 されます。<br />
ベクタのラップアラウンド<br />
ベ ク タ がバン ク の 最 終 位 置 か ら はみ 出 す と 、 以 下 の よ う に 同 じバン ク の 開 始<br />
位 置 に ラ ッ プア ラ ウ ン ド さ れます。<br />
• s5 で 始 ま る 長 さ 6 のベク タは {s5, s6, s7, s0, s1, s2} となります。<br />
• s15 で 始 ま る 長 さ 3 のベク タは {s15, s8, s9} となります。<br />
• s22 で 始 ま る 長 さ 4 のベク タは {s22, s23, s16, s17} となります。<br />
• d7 で 始 ま る 長 さ 2 のベク タは {d7, d4} となります。<br />
• d10 で 始 ま る 長 さ 3 のベク タは {d10, d11, d8} となります。<br />
1 つのベ ク タ が 複 数 のバン ク のレ ジ ス タ を 保 持 する こ と はで き ません。<br />
ベクタのスト ライド<br />
上 記 の 例 が 示 すよ う に、 ベ ク タ には 連 続 する レ ジ ス タ を 使 用 で き ますが、 1<br />
つおき のレ ジ ス タ を 使 用 する こ と も で き ます。 これは、FPSCR の STRIDE ビッ ト<br />
によって 制 御 されます (「FPSCR : 浮 動 小 数 点 ス テータ ス / 制 御 レ ジ ス タ」<br />
(ページ 5-104) を 参 照 )。 以 下 に 例 を 示 し ます。<br />
• s1 で 始 ま る、 長 さ 3、 ストライド 2 のベク タは {s1, s3, s5} となります。<br />
• s6 で 始 ま る、 長 さ 4、 ストライド 2 のベク タは {s6, s0, s2, s4} となりま<br />
す。<br />
• d1 で 始 ま る、 長 さ 2、 ストライド 2 のベク タは {d1, d3} となります。<br />
ベクタの 長 さに 関 する 制 限<br />
1 つのベク タに 同 じ レジス タ を 2 回 使 用 する こ と はで き ません。 ベクタのラッ<br />
プア ラ ウ ン ド を 可 能 にするには、 以 下 のよ う なベク タは 使 用 でき ません。<br />
• 長 さ > 4、 ストライド = 2 の 単 精 度 ベ ク タ<br />
• 長 さ > 4、 ストライド = 1 の 倍 精 度 ベ ク タ<br />
• 長 さ > 2、 ストライド = 2 の 倍 精 度 ベ ク タ<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-125<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.17.3 VFP ベクタ 演 算 とスカラ 演 算<br />
VFP 算 術 命 令 を 使 用 する と 、 以 下 を 演 算 の 対 象 にする こ と がで き ます。<br />
• スカラ<br />
• ベクタ<br />
• スカラとベクタ<br />
ベクタの 長 さは、FPSCR の LEN ビットを 使 用 して 制 御 します (「FPSCR : 浮 動 小<br />
数 点 ス テータ ス / 制 御 レ ジ ス タ」 (ページ 5-104) を 参 照 )。<br />
LEN が 1 の 場 合 、 すべての 演 算 はス カ ラ にな り ます。<br />
ベクタでは、FPSCR の STRIDE ビッ トによって 制 御 されるストライドを 1 または<br />
2 に 指 定 でき ます。 STRIDE が 1 の 場 合 、 ベ ク タ の 要 素 はバン ク 内 で 連 続 し たレ<br />
ジ ス タ を 使 用 し ます。 STRIDE が 2 の 場 合 、 ベ ク タ の 要 素 はバン ク 内 で 1 つおき<br />
のレジスタを 使 用 します。<br />
5-126 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
ス カ ラ 演 算 、 ベク タ 演 算 、 および 混 合 演 算 の 制 御<br />
LEN が 1 よ り 大 き い 場 合 、 算 術 演 算 の 動 作 は、 デス テ ィ ネーシ ョ ン レ ジ ス タ と<br />
オペランドレジスタが 配 置 されているレジスタバンクによって 異 なり ます<br />
(「レジスタバンク」 (ページ 5-123) を 参 照 )。<br />
以 下 の 汎 用 形 式 の 命 令 を 指 定 する と し ます。<br />
Op Fd,Fn,Fm<br />
Op Fd,Fm<br />
こ の 場 合 、 動 作 は 以 下 の と お り です。<br />
• Fd が 最 初 または 5 番 目 のレ ジ ス タバン ク (s0 ~ s7、d0 ~ d3、または d16<br />
~ d19) にあ る 場 合 、 ス カ ラ 演 算 にな り ます。<br />
• Fm が 最 初 または 5 番 目 のレ ジ ス タバン ク にあ る が、 Fd はない 場 合 、 混 合<br />
演 算 にな り ます。<br />
• Fd と Fm のいずれも 最 初 または 5 番 目 のレ ジ ス タバン ク にない 場 合 、ベ ク<br />
タ 演 算 になり ます。<br />
スカラ 演 算<br />
Op は、Fm の 値 と 、Fn が 指 定 されている 場 合 はその 値 に 対 する 演 算 を 行 います。<br />
演 算 結 果 は Fd に 返 されます。<br />
ベクタ 演 算<br />
Op は、 Fm で 始 ま るベク タ 内 の 値 と、 Fn が 指 定 されている 場 合 はその 値 で 始 ま<br />
るベク タ 内 の 値 に 対 する 演 算 を 行 います。 演 算 結 果 は、 Fd で 始 ま るベク タに<br />
返 されます。<br />
スカラ / ベ ク タ 混 合 演 算<br />
単 一 のオペラ ン ド の 命 令 の 場 合 、 Op は、 Fm の 単 一 の 値 に 対 し て 演 算 を 行 いま<br />
す。 結 果 の LEN 個 のコ ピーは、 Fd で 始 ま るベク タに 返 されます。<br />
オペラ ン ド が 複 数 あ る 命 令 の 場 合 、 Op は、 Fm の 1 つの 値 と Fn で 始 ま るベク タ<br />
の 値 に 対 し て 演 算 を 行 います。 演 算 結 果 は、 Fd で 始 ま るベク タに 返 されます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-127<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
5.17.4 VFP ディレクティブとベクタ 表 記<br />
このセクションの 説 明 は、armasm にのみ 該 当 し ます。 C コンパイラおよび C++<br />
コンパイラのインラインアセンブラでは、 このセクションで 説 明 するディレ<br />
ク テ ィ ブやベ ク タ 表 記 を 使 用 で き ません。<br />
VFP ベ ク タ モー ド の 使 用 は 制 限 さ れ、 ベ ク タ 表 記 は UAL ではサポー ト されて<br />
いません。 ベ ク タ 表 記 を 使 用 するには、 UAL 以 前 の VFP ニーモニ ッ ク を 使 用<br />
する 必 要 があ り ます。 詳 細 については、 「UAL 以 前 の VFP ニーモニ ッ ク」<br />
(ページ 5-129)を 参 照 して 下 さい。 UAL 以 前 の VFP ニーモニ ッ ク と UAL VFP<br />
ニーモニ ッ ク を 混 用 でき ます。<br />
コード 内 で VFP ベクタの 長 さ とス ト ライ ドに 関 する 情 報 をアサート し、 アセ<br />
ンブ ラ で 自 動 的 にチェ ッ ク する こ と がで き ます。 詳 細 については、 以 下 を 参<br />
照 して 下 さい。<br />
• 「VFPASSERT SCALAR」 (ページ 5-132)<br />
• 「VFPASSERT VECTOR」 (ページ 5-133)<br />
VFPASSERT デ ィ レ ク テ ィ ブを 使 用 する 場 合 は、 UAL 以 前 のニーモニ ッ ク を 使 用<br />
して 作 成 されたすべての VFP データ 処 理 命 令 でベ ク タ 情 報 を 指 定 する 必 要 が<br />
あります。 ベク タ 表 記 については、 「ベ ク タ 表 記 」 (ページ 5-131) で 説 明 しま<br />
す。 VFPASSERT デ ィ レ ク テ ィ ブを 使 用 し ない 場 合 は、 こ の 表 記 を 使 用 し ないで<br />
下 さい。<br />
5-128 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
UAL 以 前 の VFP ニーモニッ ク<br />
UAL ニーモニ ッ ク では 単 精 度 データ の 指 定 に .F32 を 使 用 しますが、UAL 以 前<br />
のニーモニ ッ ク では、 命 令 ニーモニ ッ ク に S を 追 加 します。 例 えば、VABS.32 は<br />
FABSS でした。<br />
UAL ニーモニ ッ ク では 倍 精 度 データ の 指 定 に .F64 を 使 用 しますが、UAL 以 前<br />
のニーモニッ クでは、 命 令 ニーモニッ クに D を 追 加 し ます。 例 えば、 VCMPE.64<br />
は FCMPED でした。<br />
表 5-15 は VFP ベクタモードの 影 響 を 受 ける 命 令 の UAL 以 前 のニーモニ ッ ク<br />
を 示 しています。 その 他 のすべての VFP 命 令 では、 LEN および STRIDE の 設 定 に<br />
かかわ らず、 常 にス カ ラ 演 算 が 実 行 さ れます。<br />
表 5-15 UAL 以 前 の VFP ニーモニッ ク<br />
UAL ニーモニッ ク<br />
VABS<br />
VADD<br />
VDIV<br />
VMLA<br />
VMLS<br />
VMOV (イ ミディエート)<br />
VMOV (レジスタ)<br />
VMUL<br />
VNEG<br />
VNMLA<br />
VNMLS<br />
VNMUL<br />
VSQRT<br />
VSUB<br />
対 応 する UAL 以 前 のニーモニ ッ ク<br />
FABS<br />
FADD<br />
FDIV<br />
FMAC<br />
FNMAC<br />
FCONST a<br />
FCPY<br />
FMUL<br />
FNEG<br />
FNMSC<br />
FMSC<br />
FNMUL<br />
FSQRT<br />
FSUB<br />
a. VMOV (イ ミ デ ィ エー ト ) の イ ミ デ ィ エー ト は、 ロー ド する 浮 動 小 数 点 値 です。 FCONST<br />
の イ ミ デ ィ エー ト は、 ロー ド する 浮 動 小 数 点 値 を 生 成 する 命 令 でエン コー ド さ れる<br />
数 値 です。 詳 細 については、 「FCONST のイ ミディエート 値 」 を 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-129<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
FCONST のイ ミディ エート 値<br />
表 5-16 は、 FCONST を 使 用 し て ロー ド で き る 浮 動 小 数 点 定 数 を 示 し ています。<br />
最 後 に く る ゼ ロはわか り やすい よ う に 省 略 し てあ り ます。 FCONST 命 令 に 含 め る<br />
必 要 のあ る イ ミ デ ィ エー ト 値 は、 2 進 数 の 10 進 数 表 記 abcdefgh です。 各 部 分<br />
には 以 下 の 意 味 があ り ます。<br />
a<br />
正 の 数 値 の 場 合 は 0、 負 の 数 値 の 場 合 は 1 です。<br />
bcd<br />
efgh<br />
列 見 出 し に 表 示 さ れます。<br />
行 見 出 し に 表 示 さ れます。<br />
また、0x の 後 に 16 進 数 表 記 法 を 使 用 する こ と も で き ます。<br />
表 5-16 浮 動 小 数 点 定 数 値<br />
bcd 000 001 010 011 100 101 110 111<br />
efgh<br />
0000 2.0 4.0 8.0 16.0 0.125 0.25 0.5 1.0<br />
0001 2.125 4.25 8.5 17.0 0.1328125 0.265625 0.53125 1.0625<br />
0010 2.25 4.5 9.0 18.0 0.140625 0.28125 0.5625 1.125<br />
0011 2.375 4.75 9.5 19.0 0.1484375 0.296875 0.59375 1.1875<br />
0100 2.5 5.0 10.0 20.0 0.15625 0.3125 0.625 1.25<br />
0101 2.625 5.25 10.5 21.0 0.1640625 0.328125 0.65625 1.3125<br />
0110 2.75 5.5 11.0 22.0 0.171875 0.34375 0.6875 1.375<br />
0111 2.875 5.75 11.5 23.0 0.1796875 0.359375 0.71875 1.4375<br />
1000 3.0 6.0 12.0 24.0 0.1875 0.375 0.75 1.5<br />
1001 3.125 6.25 12.5 25.0 0.1953125 0.390625 0.78125 1.5625<br />
1010 3.25 6.5 13.0 26.0 0.203125 0.40625 0.8125 1.625<br />
1011 3.375 6.75 13.5 27.0 0.2109375 0.421875 0.84375 1.6875<br />
1100 3.5 7.0 14.0 28.0 0.21875 0.4375 0.875 1.75<br />
1101 3.625 7.25 14.5 29.0 0.2265625 0.453125 0.90625 1.8125<br />
1110 3.75 7.5 15.0 30.0 0.234375 0.46875 0.9375 1.875<br />
1111 3.875 7.75 15.5 31.0 0.2421875 0.484375 0.96875 1.9375<br />
5-130 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
ベクタ 表 記<br />
UAL 以 前 の VFP データ 処 理 命 令 では、 以 下 の よ う にかぎ 括 弧 を 使 用 し て VFP<br />
レジスタのベクタを 指 定 します。<br />
• sn は、 単 精 度 ス カ ラ レ ジ ス タ n です。<br />
• sn は、 長 さ とス ト ライ ドが 現 在 のベクタの 長 さ とス ト ライ ドによって<br />
指 定 さ れる、 レ ジ ス タ n で 始 ま る 単 精 度 ベ ク タ です。<br />
• sn は、 レジ ス タ n で 始 ま る、 長 さ L、 ストライド 1 の 単 精 度 ベ ク タ で<br />
す。<br />
• sn は、 レジス タ n で 始 ま る、 長 さ L、 ストライド S の 単 精 度 ベ ク タ<br />
です。<br />
• dn は、 倍 精 度 ス カ ラ レ ジ ス タ n です。<br />
• dn は、 長 さ とス ト ライ ドが 現 在 のベクタの 長 さ とス ト ライ ドによって<br />
指 定 さ れる、 レ ジ ス タ n で 始 ま る 倍 精 度 ベ ク タ です。<br />
• dn は、 レジ ス タ n で 始 ま る、 長 さ L、 ストライド 1 の 倍 精 度 ベ ク タ で<br />
す。<br />
• dn は、 レジス タ n で 始 ま る、 長 さ L、 ストライド S の 倍 精 度 ベ ク タ<br />
です。<br />
このベクタ 表 記 には、DN ディレクティブと SN デ ィ レ ク テ ィ ブを 使 用 し て 定 義<br />
された 名 前 を 使 用 できます (「QN、 DN、 および SN」 (ページ 7-16) を 参 照 )。<br />
このベクタ 表 記 を DN ディレクティブや SN ディレクティブの 中 で 使 用 しないで<br />
下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-131<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
VFPASSERT SCALAR<br />
VFPASSERT SCALAR ディレクティブは、 後 続 の VFP 命 令 がス カ ラ モー ド であ る こ<br />
とをアセンブラに 通 知 します。<br />
構 文<br />
VFPASSERT SCALAR<br />
使 用 法<br />
VFPASSERT SCALAR ディレクティブを 使 用 して、 VFP モード が VECTOR である 任 意<br />
のコードブロッ クの 終 わりをマークできます。<br />
VFPASSERT SCALAR デ ィ レ ク テ ィ ブは、 モー ド 変 更 が 発 生 する 命 令 の 直 後 に 配 置<br />
します。 これは 一 般 に FMXR 命 令 ですが、 BL 命 令 の 場 合 も あ り ます。<br />
関 数 の 終 了 時 に VFP がベク タモード になる こ と が 予 測 される 場 合 は、<br />
VFPASSERT SCALAR デ ィ レ ク テ ィ ブを 最 後 の 命 令 の 直 後 に 配 置 し ます。 このよ う<br />
な 関 数 は AAPCS に 準 拠 し ません。 詳 細 については、<br />
install_directory\Documentation\Specifications\... にある 『<strong>ARM</strong> アーキテク<br />
チャ 向 けプ ロ シージ ャ コール 標 準 』 (aapcs.pdf) を 参 照 して 下 さい。<br />
以 下 も 参 照 し て 下 さ い。<br />
• 「ベ ク タ 表 記 」 (ページ 5-131)<br />
• 「VFPASSERT VECTOR」 (ページ 5-133)<br />
注<br />
このディレクティブからはコードは 生 成 されません。 プログラマによるア<br />
サー ト にすぎません。 こ れら のアサー ト が 互 いに 一 致 し ない 場 合 や、 VFP<br />
データ 処 理 命 令 のベ ク タ 表 記 と 一 致 し ない 場 合 は、 アセンブ ラ に よ ってエ<br />
ラーメ ッセージが 生 成 されます。<br />
ベクタの 長 さが 1 である 場 合 でも、 VFPASSERT SCALAR ディレクティブに 続 く<br />
VFP データ 処 理 命 令 のベク タ 表 記 が 検 出 される と、 アセンブラによ ってエ<br />
ラーが 生 成 されます。<br />
例<br />
VFPASSERT SCALAR ; scalar mode<br />
faddd d4, d4, d0 ; okay<br />
fadds s4, s0, s8 ; ERROR, vector in scalar mode<br />
fabss s24, s28 ; ERROR, vector in scalar mode<br />
; (even though length==1)<br />
5-132 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
VFPASSERT VECTOR<br />
VFPASSERT VECTOR ディレクティブは、 後 続 の VFP 命 令 がベ ク タ モー ド であ る こ<br />
とをアセンブラに 通 知 します。 ベクタの 長 さ とス ト ライ ドを 指 定 するこ と も<br />
できます。<br />
構 文<br />
VFPASSERT VECTOR[]<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
n<br />
1 ~ 8 でベク タの 長 さ を 指 定 し ます。<br />
s<br />
使 用 法<br />
1 ~ 2 でベク タのス ト ラ イ ド を 指 定 し ます。<br />
VFPASSERT VECTOR デ ィ レ ク テ ィ ブを 使 用 し て、 VFP モード が VECTOR となる 命 令<br />
ブ ロ ッ ク の 開 始 位 置 と 、 ベ ク タ の 長 さ ま たはス ト ラ イ ド の 変 更 をマーク で き<br />
ます。<br />
VFPASSERT VECTOR デ ィ レ ク テ ィ ブは、 変 更 が 発 生 する 命 令 の 直 後 に 配 置 し ます。<br />
これは 一 般 に FMXR 命 令 ですが、 BL 命 令 の 場 合 も あ り ます。<br />
関 数 のエン ト リ 処 理 で VFP がベク タモード になる こ と が 予 測 される 場 合 は、<br />
VFPASSERT VECTOR デ ィ レ ク テ ィ ブを 最 初 の 命 令 の 直 前 に 配 置 し ます。 このよ う<br />
な 関 数 は AAPCS に 準 拠 し ません。 詳 細 については、<br />
install_directory\Documentation\Specifications\... にある 『<strong>ARM</strong> アーキテク<br />
チャ 向 けプロシージャコール 標 準 』 (aapcs.pdf) を 参 照 して 下 さい。<br />
参 照 先 :<br />
• 「ベ ク タ 表 記 」 (ページ 5-131)<br />
• 「VFPASSERT SCALAR」 (ページ 5-132)<br />
注<br />
このディレクティブからはコードは 生 成 されません。 プログラマによるア<br />
サー ト にすぎません。 これら のアサー ト が 互 いに 一 致 し ない 場 合 や、 VFP<br />
データ 処 理 命 令 のベ ク タ 表 記 と 一 致 し ない 場 合 は、 アセンブ ラ に よ ってエ<br />
ラーメ ッセージが 生 成 されます。<br />
例<br />
VMRS r10,FPSCR ; UAL mnemonic - could be FMRX instead.<br />
BIC r10,r10,#0x00370000<br />
ORR r10,r10,#0x00020000 ; set length = 3, stride = 1<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 5-133<br />
Non-Confidential
NEON と VFP プログラ ミング<br />
VMSR FPSCR,r10<br />
VFPASSERT VECTOR<br />
; assert vector mode, unspecified length & stride<br />
faddd d4, d4, d0<br />
; ERROR, scalar in vector mode<br />
fadds s16, s0, s8 ; okay<br />
fabss s24, s28 ; wrong length, but not faulted (unspecified)<br />
VMRS r10,FPSCR<br />
BIC r10,r10,#0x00370000<br />
ORR r10,r10,#0x00030000 ; set length = 4, stride = 1<br />
VMSR FPSCR,r10<br />
VFPASSERT VECTOR ; assert vector mode, length 4, stride 1<br />
fadds s24, s0, s8 ; okay<br />
fabss s24, s24 ; ERROR, wrong length<br />
VMRS r10,FPSCR<br />
BIC r10,r10,#0x00370000<br />
ORR r10,r10,#0x00130000 ; set length = 4, stride = 2<br />
VMSR FPSCR,r10<br />
VFPASSERT VECTOR ; assert vector mode, length 4, stride 2<br />
fadds s8, s0, s16 ; ERROR, wrong stride<br />
fabss s16, s28 ; okay<br />
fadds s8, s2, s16 ; okay (s8 and s16 both have<br />
; length 4 and stride 2.<br />
; s2 is scalar.)<br />
5-134 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
第 6 章<br />
ワイヤレス MMX テクノロジの 命 令<br />
本 章 では、 ワ イ ヤレ ス MMX テ ク ノ ロ ジの 命 令 のサポー ト について 説 明 し ま<br />
す。 以 下 のセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「はじ めに」 (ページ 6-2)<br />
• 「ワイヤレス MMX テ ク ノ ロ ジに 対 する <strong>ARM</strong> のサポー ト 」 (ページ 6-3)<br />
• 「ワイヤレス MMX の 命 令 」 (ページ 6-9)<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 6-1<br />
Non-Confidential
ワイヤレス MMX テクノロジの 命 令<br />
6.1 はじめに<br />
ワイヤレス MMX テクノロジは SIMD (1 つの 命 令 で 複 数 のデータ を 並 列 に 処<br />
理 する) 命 令 のセットで、マルチメディアアプリケーションのパフォーマン<br />
スを 向 上 させる 一 部 の XScale プロセッサで 使 用 できます。 ワイヤレス MMX<br />
テクノロジでは 64 ビ ッ ト レ ジ ス タ を 使 用 し て、 パ ッ ク 形 式 の 複 数 のデータ 要<br />
素 で 演 算 できるようにします。<br />
ワイヤレス MMX テクノロジでは <strong>ARM</strong> コプロセッサ 0 および 1 を 使 用 して、<br />
その 命 令 セ ッ ト と データ 型 をサポー ト し ています。 ワイヤレス MMX テクノロ<br />
ジの 命 令 を 使 用 する ソースコード をアセンブルして、 PXA270 プロセッサで<br />
実 行 で き ます。<br />
ワイヤレス MMX 2 テクノロジは、 ワイヤレス MMX テクノロジのアップグ<br />
レードバージ ョ ンです。<br />
<strong>ARM</strong> アセンブ ラ を 使 用 する と きは、 以 下 の 点 に 注 意 し て 下 さ い。<br />
• ワイヤレス MMX テク ノ ロジの 命 令 は、 サポー ト されているプロセッサ<br />
(armasm --cpu PXA270) を 指 定 し た 場 合 にのみアセンブル さ れます。<br />
• PXA270 プロセッサでは、 <strong>ARM</strong> または Thumb ® で 記 述 されたコード のみ<br />
をサポート します。<br />
• <strong>ARM</strong> フラグの 状 態 によっては、 ほとんどのワイヤレス MMX テクノロ<br />
ジの 命 令 は 条 件 実 行 で き ます。 ワイヤレス MMX テクノロジの 条 件 コー<br />
ドは、 <strong>ARM</strong> の 条 件 コード と 同 じです。<br />
本 章 では、 <strong>RealView</strong> <strong>Compilation</strong> <strong>Tools</strong> における <strong>ARM</strong> アセンブラによるワイヤ<br />
レス MMX テ ク ノ ロ ジのサポー ト について 説 明 し ます。 ワイヤレス MMX テク<br />
ノロジ 自 体 については 詳 しく 説 明 していません。 プログラマモデル、 および<br />
ワイヤレス MMX テ ク ノ ロ ジの 命 令 セ ッ ト の 詳 細 な 説 明 については、<br />
『Wireless MMX Technology Developer Guide』 を 参 照 して 下 さい。<br />
6-2 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ワイヤレス MMX テ ク ノ ロジの 命 令<br />
6.2 ワイヤレス MMX テクノロジに 対 する <strong>ARM</strong> のサポー ト<br />
このセクショ ンでは、 ワイヤレス MMX テクノロジ、および MMX 2 テクノロ<br />
ジに 対 する アセンブ ラ のサポー ト について 説 明 し ます。 このセクションは、<br />
以 下 のサブセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「レジスタ」<br />
• 「デ ィ レ ク テ ィ ブ、 WRN と WCN」 (ページ 6-4)<br />
• 「Frame ディレクティブ」 (ページ 6-5)<br />
• 「ワイヤレス MMX ロード / ス ト ア 命 令 」 (ページ 6-6)<br />
• 「ワイヤレス MMX テ ク ノ ロ ジの 命 令 と XScale の 命 令 」 (ページ 6-7)<br />
6.2.1 レジスタ<br />
ワイヤレス MMX テクノロジでは、 次 の 2 つのタ イプのレジス タ をサポー ト<br />
しています。<br />
ステータスレジスタおよび 制 御 レジスタ<br />
制 御 レ ジ ス タはコ プ ロ セ ッ サ 1 にマップされ、 汎 用 レジス タ<br />
wCGR0 ~ wCGR3 および SIMD フラグを 含 んでいます。 これらのレジ<br />
ス タの 詳 細 については、 表 6-1 を 参 照 して 下 さい。<br />
これらのレジスタに 対 する 読 み 出 しおよび 書 き 込 みには、 ワイ<br />
ヤレス MMX テクノロジの 命 令 TMCR および TMRC を 使 用 し ます。<br />
表 6-1 ステータスレジスタおよび 制 御 レジスタ<br />
タイプ<br />
ワイヤレス MMX テクノ<br />
ロジのレジスタ<br />
CP1 レジスタ<br />
コプロセッサ ID wCID c0<br />
制 御 wCon c1<br />
サチュ レーシ ョ ン<br />
SIMD フラグ<br />
wCSSF<br />
c2<br />
算 術 SIMD フラグ wCASF c3<br />
予 約 - c4 - c7<br />
汎 用 wCGR0 - wCGR3 c8 - c11<br />
予 約 - c12 - c15<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 6-3<br />
Non-Confidential
ワイヤレス MMX テクノロジの 命 令<br />
SIMD データ レ ジ ス タ<br />
データ レ ジ ス タ (wR0 ~ wR15) はコプロセッサ 0 にマップされ、<br />
16 ビット× 64 ビ ッ ト のパ ッ ク 化 データ を 保 持 し ます。 これらの<br />
レジスタ と <strong>ARM</strong> レ ジ ス タ 間 でデータ を 移 動 する には、 ワ イ ヤレ<br />
ス MMX テ ク ノ ロ ジの 疑 似 命 令 であ る TMRRC および TMCRR を 使 用<br />
します。<br />
レジス タの 詳 細 については、 『Wireless MMX Technology Developer Guide』 を 参<br />
照 して 下 さい。<br />
ワイヤレス MMX テクノロジの 命 令 をアセンブルする 場 合 、 アセンブラは 次<br />
のよ う なレジスタの 仕 様 を 受 け 入 れます。<br />
• ワイヤレス MMX テ ク ノ ロ ジの 仕 様 と 完 全 に 一 致 する、 大 文 字 と 小 文 字<br />
の 混 在 。 wR0、 wCID、 wCon など。<br />
• すべて 小 文 字 。 wr0、 wcid、 wcon など。<br />
• すべて 大 文 字 。 WR0、 WCID、 WCON など。<br />
レジス タ 名 を 指 定 する と きは、 WRN ディレクティブおよび WCN ディレクティブ<br />
をサポート します (「「デ ィ レ ク テ ィ ブ、 WRN と WCN」」 を 参 照 )。<br />
6.2.2 ディレクティブ、 WRN と WCN<br />
次 のデ ィ レ ク テ ィ ブを 使 用 し て、 ワ イヤレ ス MMX テクノロジをサポートで<br />
きます。<br />
WCN<br />
WRN<br />
指 定 さ れた 制 御 レ ジ ス タ 名 を 定 義 し ます。 例 は 以 下 の 通 り です。<br />
speed WCN wcgr0 ; defines speed as a symbol for control reg 0<br />
指 定 さ れた SIMD データレジス タ 名 を 定 義 し ます。 例 は 以 下 の 通<br />
りです。<br />
rate WRN wr6 ; defines rate as a symbol for data reg 6<br />
同 一 レ ジ ス タ に 複 数 の 名 前 を 付 けて 矛 盾 を 生 じ さ せる よ う な 使 用 方 法 は 避 け<br />
て 下 さい。 「 定 義 済 みのレ ジ ス タおよびコ プ ロ セ ッ サ 名 」 (ページ 3-24) に 記<br />
載 さ れてい る 事 前 定 義 さ れた 名 前 や、 「レジスタ」 (ページ 6-3) に 記 載 され<br />
ているレジス タ 名 を 使 用 しないで 下 さい。<br />
6-4 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ワイヤレス MMX テ ク ノ ロジの 命 令<br />
6.2.3 Frame ディレクティブ<br />
ワイヤレス MMX テ ク ノ ロ ジのレ ジ ス タ を 通 常 の 方 法 で FRAME ディレクティブ<br />
と と もに 使 用 して、 オブジェ ク ト フ ァ イルにデバッグ 情 報 を 追 加 できます<br />
( 詳 細 については、 「Frame ディレクティブ」 (ページ 7-46) を 参 照 )。 次 の 制<br />
限 に 注 意 し て 下 さい。<br />
• ワイヤレス MMX テクノロジのレジスタである wR0 ~ wR9 または wCGR0 ~<br />
wCGR3 をスタックにプッシュしよ う とすると、 警 告 が 表 示 されます<br />
(「FRAME PUSH」 (ページ 7-52) を 参 照 )。<br />
• ワイヤレス MMX テクノロジのレジスタは、 アドレスオフセッ ト として<br />
使 用 で き ません (「FRAME ADDRESS」 (ページ 7-48) および 「FRAME<br />
RETURN ADDRESS」 (ページ 7-57) を 参 照 )。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 6-5<br />
Non-Confidential
ワイヤレス MMX テクノロジの 命 令<br />
6.2.4 ワイヤレス MMX ロード / ストア 命 令<br />
ワイヤレス MMX コプロセッサレジスタに 対 してバイ ト、 ハーフワード、<br />
ワード、 またはダブルワードのロード / ストアを 実 行 します。<br />
構 文<br />
op{cond} wRd, [Rn, #{-}offset]{!}<br />
op{cond} wRd, [Rn] {, #{-}offset}<br />
opW{cond} wRd, label<br />
opW wCd, [Rn, #{-}offset]{!}<br />
opW wCd, [Rn] {, #{-}offset}<br />
opD{cond} wRd, label<br />
opD wRd, [Rn, {-}Rm {, LSL #imm4}]{!}<br />
opD wRd, [Rn], {-}Rm {, LSL #imm4}<br />
; MMX2 only<br />
; MMX2 only<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
op<br />
<br />
cond<br />
wRd<br />
wCd<br />
Rn<br />
次 のいずれかを 指 定 でき ます。<br />
WLDR ワイヤレス MMX レジスタをロードします。<br />
WSTR<br />
ワイヤレス MMX レジスタをス トアします。<br />
次 のいずれかを 指 定 でき ます。<br />
B バイ ト<br />
H ハーフ ワー ド<br />
W ワード<br />
D ダブルワード<br />
任 意 の 条 件 コー ド を 指 定 し ます (「 条 件 実 行 」 (ページ 2-20) を<br />
参 照 )。<br />
ロー ド ま たはス ト ア を 実 行 する ワ イ ヤレ ス MMX SIMD データ レ<br />
ジ ス タ を 指 定 し ます。<br />
ロー ド ま たはス ト ア を 実 行 する ワ イ ヤレ ス MMX ステータスレジ<br />
スタおよび 制 御 レジスタを 指 定 します。<br />
メモリアドレスのベースとなるレジスタを 指 定 します。<br />
6-6 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ワイヤレス MMX テ ク ノ ロジの 命 令<br />
offset<br />
イミディエートオフセットを 指 定 します。 オフセッ ト を 指 定 しな<br />
かった 場 合 、 その 命 令 はゼ ロ オフセ ッ ト 命 令 にな り ます。<br />
! 任 意 に 指 定 で き る 接 尾 文 字 です。 ! が 存 在 する 場 合 、 命 令 はプレ<br />
インデクス 命 令 になります。<br />
label<br />
Rm<br />
imm4<br />
プログラム 相 対 式 を 指 定 します。 詳 細 については、 「レジスタ 相<br />
対 式 と プ ロ グ ラ ム 相 対 式 」 (ページ 3-39) を 参 照 して 下 さい。<br />
label は 現 在 の 命 令 か ら +/- 1020 以 内 に 配 置 する 必 要 があ り ます。<br />
オフセ ッ ト と し て 使 用 さ れる 値 を 保 持 する レ ジ ス タ を 指 定 し ま<br />
す。 Rm に r15 は 指 定 でき ません。<br />
Rm を 左 にシフ ト するビ ッ ト 数 を 0 ~ 15 の 範 囲 で 保 持 し ます。<br />
SIMD レジス タへの 定 数 のロー ド<br />
アセンブラでは、 WLDRW および WLDRD リ テ ラ ルロー ド 疑 似 命 令 も サポー ト し ま<br />
す。 以 下 に 例 を 示 し ます。<br />
WLDRW wr0, =0x114<br />
以 下 の 点 に 注 意 し て 下 さ い。<br />
• アセンブラでは、 バイ トおよびハーフワード リテラルをロードできませ<br />
ん。 こ れら を ロー ド する と 降 格 エ ラーが 生 成 さ れます。 ダウングレード<br />
されると、 命 令 は WLDRW に 変 換 され、 32 ビ ッ ト リ テ ラ ルが 生 成 さ れま<br />
す。 これはバイ ト リ テ ラルのロード と 同 様 ですが、 32 ビッ トワードを 使<br />
用 する 点 が 異 な り ます。<br />
• ロードする リ テラルがゼロで、 デスティネーシ ョ ンが SIMD データ レ ジ<br />
ス タ であ る 場 合 、 命 令 は WZERO に 変 換 されます。<br />
• 8 バイ ト 整 列 ではないダブルワード ロード は 予 測 不 能 です。<br />
6.2.5 ワイヤレス MMX テクノロジの 命 令 と XScale の 命 令<br />
ワイヤレス MMX テ ク ノ ロ ジの 命 令 は XScale の 命 令 と 重 複 し ます。 競 合 を 避<br />
ける ために、 アセンブラには 次 の 制 約 があ り ます。<br />
• XScale の 命 令 と ワ イヤレ ス MMX テクノロジの 命 令 を 同 じアセンブリに<br />
混 在 させる こ と はで き ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 6-7<br />
Non-Confidential
ワイヤレス MMX テクノロジの 命 令<br />
• ワイヤレス MMX テクノロジの TMIA 命 令 には、 XScale の MIA 命 令 と 重 複<br />
する MIA ニーモニ ッ クがあ り ます。 次 の 点 に 注 意 し て 下 さい。<br />
— MIA acc0, Rm, Rs は XScale では 使 用 でき ますが、 ワ イヤレ ス MMX<br />
テクノロジではエラーになります。<br />
— MIA wR0, Rm, Rs および TMIA wR0, Rm, Rs は、ワ イ ヤレ ス MMX テクノ<br />
ロジで 使 用 できます。<br />
— TMIA acc0, Rm, Rs は XScale ではエラーにな り ます(XScale には TMIA<br />
命 令 はあ り ません)。<br />
XScale 命 令 の 詳 細 については、 「MIA、 MIAPH、 MIAxy」 (ページ 4-98) と<br />
「MAR、 MRA」 (ページ 4-157) を 参 照 して 下 さい。<br />
6-8 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ワイヤレス MMX テ ク ノ ロジの 命 令<br />
6.3 ワイヤレス MMX の 命 令<br />
表 6-2 に、 ワ イ ヤレ ス MMX テ ク ノ ロ ジの 命 令 セ ッ ト の 一 覧 を 示 し ます。 この<br />
表 を 使 用 して、 『Wireless MMX Technology Developer Guide』 で 説 明 されている<br />
各 命 令 を 探 し て 下 さ い。 「 疑 似 命 令 」 ( 表 6-3 (ページ 6-11)) も 参 照 し て 下 さ<br />
い。<br />
このセクショ ンでは、 ワイヤレス MMX テクノロジのレジスタは wRn、 wRd、<br />
<strong>ARM</strong> のレジスタは Rn、 Rd と 示 されます。<br />
表 6-2 ワイヤレス MMX テ ク ノ ロジの 命 令<br />
ニーモニッ ク<br />
TANDC<br />
TBCST<br />
例<br />
TANDCB r15<br />
TBCSTB wr15, r1<br />
TEXTRC TEXTRCB r15, #0<br />
TEXTRM TEXTRMUBCS r3, wr7, #7<br />
TINSR TINSRB wr6, r11, #0<br />
TMIA, TMIAPH,<br />
TMIAxy<br />
TMOVMSK<br />
TMIANE wr1, r2, r3<br />
TMIAPH wr4, r5, r6<br />
TMIABB wr4, r5, r6<br />
MIAPHNE wr4, r5, r6<br />
TMOVMSKBNE r14, wr15<br />
TORC TORCB r15<br />
WACC<br />
WADD<br />
WALIGNI, WALIGNR<br />
WACCBGE wr1, wr2<br />
WADDBGE wr1, wr2, wr13<br />
WALIGNI wr7, wr6, wr5,#3<br />
WALIGNR0 wr4, wr8, wr12<br />
WAND, WANDN WAND wr1, wr2, wr3<br />
WANDN wr5, wr5, wr9<br />
WAVG2<br />
WCMPEQ<br />
WCMPGT<br />
WAVG2B wr3, wr6, wr9<br />
WAVG2BR wr4, wr7, wr10<br />
WCMPEQB wr0, wr4, wr2<br />
WCMPGTUB wr0, wr4, wr2<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 6-9<br />
Non-Confidential
ワイヤレス MMX テクノロジの 命 令<br />
表 6-2 ワイヤレス MMX テ ク ノ ロジの 命 令 ( 続 き)<br />
ニーモニッ ク<br />
例<br />
WLDR WLDRB wr1, [r2, #0]<br />
WMAC WMACU wr3, wr4, wr5<br />
WMADD<br />
WMAX, WMIN<br />
WMUL<br />
WMADDU wr3, wr4, wr5<br />
WMAXUB wr0, wr4, wr2<br />
WMINSB wr0, wr4, wr2<br />
WMULUL wr4, wr2, wr3<br />
WOR WOR wr3, wr1, wr4<br />
WPACK<br />
WPACKHUS wr2, wr7, wr1<br />
WROR WRORH wr3, wr1, wr4<br />
WSAD WSADB wr3, wr5, wr8<br />
WSHUFH WSHUFH wr8, wr15, #17<br />
WSLL, WSRL WSLLH wr3, wr1, wr4<br />
WSRLHG wr3, wr1, wcgr0<br />
WSRA WSRAH wr3, wr1, wr4<br />
WSRAHG wr3, wr1, wcgr0<br />
WSTR WSTRB wr1, [r2, #0]<br />
WSTRW wc1, [r2, #0]<br />
WSUB<br />
WUNPCKEH, WUNPCKEL<br />
WUNPCKIH, WUNPCKIL<br />
WSUBBGE wr1, wr2, wr13<br />
WUNPCKEHUB wr0, wr4<br />
WUNPCKELSB wr0, wr4<br />
WUNPCKIHB wr0, wr4, wr2<br />
WUNPCKILH wr1, wr5, wr3<br />
WXOR WXOR wr3, wr1, wr4<br />
6-10 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ワイヤレス MMX テ ク ノ ロジの 命 令<br />
6.3.1 疑 似 命 令<br />
表 6-3 では、 ワ イヤレ ス MMX テ ク ノ ロ ジの 疑 似 命 令 の 概 要 を 説 明 し ます。 こ<br />
の 表 を 使 用 し て、 『Wireless MMX Technology Developer Guide』 および 「 第 4 章<br />
<strong>ARM</strong> 命 令 と Thumb 命 令 」 で 説 明 されている 命 令 を 探 して 下 さい。<br />
表 6-3 ワイヤレス MMX テ ク ノ ロジの 疑 似 命 令<br />
ニーモ<br />
ニック<br />
概 要<br />
例<br />
TMCR<br />
ソースレジスタ Rn の 内 容 を 制 御 レジス タ wCn に 移 動 し ます。 <strong>ARM</strong><br />
MCR コ プ ロ セ ッ サ 命 令 にマ ッ プ し ます ((ページ 4-134))。<br />
TMCR<br />
wc1, r10<br />
TMCRR<br />
2 つのソース レジス タ RnLo および RnHi の 内 容 をデステ ィ ネーシ ョ ン<br />
レジスタ wRd に 移 動 し ます。 RnLo または RnHi に r15 を 使 用 しないで 下<br />
さい。 <strong>ARM</strong> MCRR コ プ ロ セ ッ サ 命 令 にマ ッ プ し ます ((ページ<br />
4-134))。<br />
TMCRR<br />
wr4, r5, r6<br />
TMRC<br />
制 御 レ ジ ス タ wCn の 内 容 をデステ ィ ネーシ ョ ン レジス タ Rd に 移 動 し<br />
ます。 Rd に r15 を 使 用 しないで 下 さい。 <strong>ARM</strong> MRC コ プ ロ セ ッ サ 命 令 に<br />
マ ッ プ し ます ((ページ 4-136))。<br />
TMRC<br />
r1, wc2<br />
TMRRC<br />
ソースレジスタ wRn の 内 容 を 2 つのデステ ィ ネーシ ョ ンレジス タ<br />
RdLo および RdHi に 移 動 し ます。 デステ ィネーシ ョ ンレジスタに r15<br />
を 使 用 しないで 下 さい。 RdLo および RdHi は 別 のレジス タであ る 必 要<br />
があ り ます。 それ 以 外 の 場 合 は 結 果 が 予 測 で き ない も のにな り ま<br />
す。 <strong>ARM</strong> MRRC コ プ ロ セ ッ サ 命 令 にマ ッ プ し ます ((ページ 4-136))。<br />
TMRRC<br />
r1, r0, wr2<br />
WMOV<br />
ソースレジスタ wRn の 内 容 をデステ ィ ネーシ ョ ン レジス タ wRd に 移<br />
動 します。 この 命 令 は、WOR の 形 式 です ( 表 6-2 (ページ 6-9) を 参<br />
照 )。<br />
WMOV<br />
wr1, wr8<br />
WZERO デステ ィネーシ ョ ンレジスタ wRd をゼロにします。 この 命 令 は、<br />
WANDN の 形 式 です ( 表 6-2 (ページ 6-9) を 参 照 )。<br />
WZERO<br />
wr1<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 6-11<br />
Non-Confidential
ワイヤレス MMX テクノロジの 命 令<br />
6-12 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
第 7 章<br />
ディレクティブリファレンス<br />
本 章 では、 <strong>ARM</strong> ® アセンブラ armasm に 使 用 でき るデ ィ レ ク テ ィ ブについて 説<br />
明 します。 以 下 のセ ク シ ョ ンか ら 構 成 さ れています。<br />
• 「デ ィ レ ク テ ィ ブの 一 覧 (アルフ ァ ベ ッ ト 順 )」 (ページ 7-2)<br />
• 「シンボル 定 義 デ ィ レ ク テ ィ ブ」 (ページ 7-4)<br />
• 「データ 定 義 デ ィ レ ク テ ィ ブ」 (ページ 7-18)<br />
• 「アセンブ リ 制 御 デ ィ レ ク テ ィ ブ」 (ページ 7-36)<br />
• 「Frame ディレクティブ」 (ページ 7-46)<br />
• 「 通 知 デ ィ レ ク テ ィ ブ」 (ページ 7-65)<br />
• 「 命 令 セ ッ ト と 構 文 選 択 のデ ィ レ ク テ ィ ブ」 (ページ 7-73)<br />
• 「その 他 のデ ィ レ ク テ ィ ブ」 (ページ 7-77)<br />
注<br />
本 章 で 説 明 するデ ィ レ ク テ ィ ブは、 <strong>ARM</strong> C コンパイラおよび C++ コンパイラ<br />
のイ ン ラ イ ンアセンブラには 使 用 でき ません。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-1<br />
Non-Confidential
ディレクティブリファレンス<br />
7.1 デ ィ レ ク テ ィ ブの 一 覧 (アルフ ァ ベ ッ ト 順 )<br />
表 7-1 は、 ディ レ クテ ィブの 一 覧 を 示 しています。 こ こから 個 々のディレク<br />
ティブの 説 明 を 見 つけて 下 さい。<br />
表 7-1 各 デ ィ レ ク テ ィ ブの 参 照 先<br />
ディレクティ<br />
ブ<br />
ページ デ ィ レ クテ ィ ブ ページ デ ィ レクテ ィ ブ ページ<br />
ALIGN<br />
<strong>ARM</strong>、 CODE32<br />
(ページ<br />
7-78)<br />
(ページ<br />
7-74)<br />
EXPORT、 GLOBAL (ページ 7-92) MACRO、 MEND (ページ<br />
7-37)<br />
EXPORTAS (ページ 7-94) MAP (ページ<br />
7-21)<br />
AREA<br />
(ページ<br />
7-81)<br />
EXTERN (ページ 7-97) MEND (「MACRO」 を 参<br />
照 )<br />
(ページ<br />
7-37)<br />
ASSERT<br />
ATTR<br />
CN<br />
(ページ<br />
7-65)<br />
(ページ<br />
7-86)<br />
(ページ<br />
7-14)<br />
FIELD (ページ 7-23) MEXIT (ページ<br />
7-41)<br />
FRAME ADDRESS (ページ 7-48) NOFP (ページ<br />
7-102)<br />
FRAME POP (ページ 7-50) OPT (ページ<br />
7-68)<br />
CODE16<br />
(ページ<br />
7-74)<br />
FRAME PUSH (ページ 7-52) PRESERVE8<br />
(「REQUIRE8」 を 参 照 )<br />
(ページ<br />
7-103)<br />
COMMON<br />
(ページ<br />
7-35)<br />
FRAME REGISTER (ページ 7-55) PROC (「FUNCTION」 を<br />
参 照 )<br />
(ページ<br />
7-62)<br />
CP<br />
DATA<br />
DCB<br />
DCD、 DCDU<br />
(ページ<br />
7-15)<br />
(ページ<br />
7-35)<br />
(ページ<br />
7-26)<br />
(ページ<br />
7-27)<br />
FRAME RESTORE (ページ 7-56) QN (ページ<br />
7-16)<br />
FRAME SAVE (ページ 7-58) RELOC (ページ<br />
7-10)<br />
FRAME STATE REMEMBER (ページ 7-59) REQUIRE (ページ<br />
7-102)<br />
FRAME STATE RESTORE (ページ 7-60) REQUIRE8、 PRESERVE8 (ページ<br />
7-103)<br />
DCDO<br />
(ページ<br />
7-28)<br />
FRAME UNWIND ON、FRAME<br />
UNWIND OFF<br />
(ページ 7-61) RLIST (ページ<br />
7-13)<br />
7-2 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
表 7-1 各 デ ィ レ ク テ ィ ブの 参 照 先 ( 続 き)<br />
ディレクティ<br />
ブ<br />
ページ デ ィ レ クテ ィ ブ ページ デ ィ レクテ ィ ブ ページ<br />
DCFD、 DCFDU<br />
DCFS、 DCFSU<br />
DCI<br />
(ページ<br />
7-29)<br />
(ページ<br />
7-30)<br />
(ページ<br />
7-31)<br />
FUNCTION、 PROC (ページ 7-62) RN (ページ<br />
7-12)<br />
GBLA、 GBLL、 GBLS (ページ 7-5) ROUT (ページ<br />
7-104)<br />
GET、 INCLUDE (ページ 7-95) SETA、 SETL、 SETS (ページ<br />
7-8)<br />
DCQ、 DCQU<br />
(ページ<br />
7-33)<br />
GLOBAL (「EXPORT」 を<br />
参 照 )<br />
(ページ 7-92) SN (ページ<br />
7-16)<br />
DCW、 DCWU<br />
DN<br />
(ページ<br />
7-34)<br />
(ページ<br />
7-16)<br />
IF、 ELSE、 ENDIF、 ELIF (ページ 7-42) SPACE または FILL (ページ<br />
7-24)<br />
IMPORT (ページ 7-97) SUBT (ページ<br />
7-71)<br />
ELIF、 ELSE<br />
(「IF」 を 参 照 )<br />
(ページ<br />
7-42)<br />
INCBIN<br />
(ページ<br />
7-100)<br />
THUMB<br />
(ページ<br />
7-74)<br />
END<br />
(ページ<br />
7-88)<br />
INCLUDE (「GET」 を 参<br />
照 )<br />
(ページ 7-95) THUMBX (ページ<br />
7-74)<br />
ENDFUNC、 ENDP<br />
(ページ<br />
7-64)<br />
INFO (ページ 7-67) TTL (ページ<br />
7-71)<br />
ENDIF (「IF」<br />
を 参 照 )<br />
(ページ<br />
7-42)<br />
KEEP<br />
(ページ<br />
7-101)<br />
WHILE、 WEND<br />
(ページ<br />
7-45)<br />
ENTRY<br />
EQU<br />
(ページ<br />
7-88)<br />
(ページ<br />
7-90)<br />
LCLA、 LCLL、 LCLS (ページ 7-7)<br />
LTORG (ページ 7-20)<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-3<br />
Non-Confidential
ディレクティブリファレンス<br />
7.2 シンボル 定 義 デ ィ レ ク テ ィ ブ<br />
こ のセ ク シ ョ ンでは、 以 下 のデ ィ レ ク テ ィ ブについて 説 明 し ます。<br />
• 「GBLA、 GBLL、 GBLS」 (ページ 7-5)<br />
グ ローバル 算 術 変 数 、 論 理 変 数 、 ま たは 文 字 列 変 数 を 宣 言 し ます。<br />
• 「LCLA、 LCLL、 LCLS」 (ページ 7-7)<br />
ローカル 算 術 変 数 、 論 理 変 数 、 ま たは 文 字 列 変 数 を 宣 言 し ます。<br />
• 「SETA、 SETL、 SETS」 (ページ 7-8)<br />
算 術 変 数 、 論 理 変 数 、 ま たは 文 字 列 変 数 の 値 を 設 定 し ます。<br />
• 「RELOC」 (ページ 7-10)<br />
オブジェ ク ト フ ァ イルで ELF の 再 配 置 をエン コー ド し ます。<br />
• 「RN」 (ページ 7-12)<br />
指 定 されたレジス タの 名 前 を 定 義 し ます。<br />
• 「RLIST」 (ページ 7-13)<br />
汎 用 レジス タセッ ト の 名 前 を 定 義 し ます。<br />
• 「CN」 (ページ 7-14)<br />
コプロセッサレジス タ 名 を 定 義 し ます。<br />
• 「CP」 (ページ 7-15)<br />
コプロセッサ 名 を 定 義 します。<br />
• 「QN、 DN、 および SN」 (ページ 7-16)<br />
倍 精 度 ま たは 単 精 度 の VFP レ ジ ス タ 名 を 定 義 し ます。<br />
7-4 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.2.1 GBLA、 GBLL、 GBLS<br />
GBLA デ ィ レ ク テ ィ ブは、 グ ローバル 算 術 変 数 を 宣 言 し、 その 値 をゼ ロ に 初 期<br />
化 します。<br />
GBLL デ ィ レ ク テ ィ ブは、 グ ローバル 論 理 変 数 を 宣 言 し、 その 値 を {FALSE} に 初<br />
期 化 し ます。<br />
GBLS デ ィ レ ク テ ィ ブは、 グ ローバル 文 字 列 変 数 を 宣 言 し、 その 値 を NULL 文<br />
字 列 "" に 初 期 化 し ます。<br />
構 文<br />
variable<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
<br />
variable<br />
GBLA、 GBLL、 または GBLS のいずれかを 指 定 し ます。<br />
変 数 の 名 前 を 指 定 し ます。 variable は、 ソース フ ァ イル 内 のシン<br />
ボルの 中 で 一 意 であ る 必 要 があ り ます。<br />
使 用 法<br />
定 義 済 みの 変 数 に 対 し て 上 記 のデ ィ レ ク テ ィ ブのいずれかを 使 用 する と 、 そ<br />
の 変 数 は 上 記 と 同 じ 値 に 再 初 期 化 さ れます。<br />
変 数 の 有 効 範 囲 は、 その 変 数 を 含 むソース フ ァ イル 内 に 制 限 さ れています。<br />
変 数 の 値 は、 SETA、 SETL、 または SETS のいずれかのディ レ ク テ ィ ブを 使 用 して<br />
設 定 し ます (「SETA、 SETL、 SETS」 (ページ 7-8) を 参 照 )。<br />
ローカル 変 数 の 宣 言 については、 「LCLA、 LCLL、 LCLS」 (ページ 7-7) を 参<br />
照 して 下 さい。<br />
グローバル 変 数 は、--predefine アセンブラコマンド ラ インオプシ ョ ンを 使 用 し<br />
て 設 定 する こ と も で き ます。 詳 細 については、 「コマンド 構 文 」 (ページ 3-2)<br />
を 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-5<br />
Non-Confidential
ディレクティブリファレンス<br />
例<br />
例 7-1 では、 変 数 objectsize が 宣 言 され、 objectsize の 値 が 0xFF に 設 定 されま<br />
す。 その 後 、 その 値 が SPACE ディレクティブで 使 用 されます。<br />
例 7-1<br />
GBLA objectsize ; declare the variable name<br />
objectsize SETA 0xFF ; set its value<br />
.<br />
. ; other code<br />
.<br />
SPACE objectsize ; quote the variable<br />
例 7-2 は、 armasm を 呼 び 出 す 場 合 の 変 数 の 宣 言 方 法 と 設 定 方 法 を 示 し ていま<br />
す。 アセンブ リ 時 に 変 数 の 値 を 設 定 する 場 合 は、 こ の 方 法 を 使 用 し て 下 さ<br />
い。--pd は、--predefine と 同 じ 意 味 です。<br />
例 7-2<br />
armasm --predefine "objectsize SETA 0xFF" sourcefile -o objectfile<br />
7-6 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.2.2 LCLA、 LCLL、 LCLS<br />
LCLA デ ィ レ ク テ ィ ブは、 ローカル 算 術 変 数 を 宣 言 し、 その 値 をゼ ロ に 初 期 化<br />
します。<br />
LCLL デ ィ レ ク テ ィ ブは、 ローカル 論 理 変 数 を 宣 言 し、 その 値 を {FALSE} に 初 期<br />
化 します。<br />
LCLS デ ィ レ ク テ ィ ブは、 ローカル 文 字 列 変 数 を 宣 言 し、 その 値 を NULL 文 字<br />
列 "" に 初 期 化 し ます。<br />
構 文<br />
variable<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
<br />
variable<br />
LCLA、 LCLL、 または LCLS のいずれかを 指 定 し ます。<br />
変 数 の 名 前 を 指 定 し ます。 variable は、 マ ク ロ 内 で 一 意 であ る 必<br />
要 があ り ます。<br />
使 用 法<br />
定 義 済 みの 変 数 に 対 し て 上 記 のデ ィ レ ク テ ィ ブのいずれかを 使 用 する と 、 そ<br />
の 変 数 は 上 記 と 同 じ 値 に 再 初 期 化 さ れます。<br />
変 数 の 有 効 範 囲 は、 その 変 数 を 含 むマ ク ロ の 特 定 の イ ン ス タ ン スに 制 限 さ れ<br />
ています (「MACRO、 MEND」 (ページ 7-37) を 参 照 )。<br />
変 数 の 値 は、 SETA、 SETL、 または SETS のいずれかのディ レ ク テ ィ ブを 使 用 して<br />
設 定 し ます (「SETA、 SETL、 SETS」 (ページ 7-8) を 参 照 )。<br />
グローバル 変 数 の 宣 言 については、 「GBLA、 GBLL、 GBLS」 (ページ 7-5) を<br />
参 照 し て 下 さ い。<br />
例<br />
MACRO<br />
; Declare a macro<br />
$label message $a<br />
; Macro prototype line<br />
LCLS err ; Declare local string<br />
; variable err.<br />
err SETS "error no: " ; Set value of err<br />
$label ; code<br />
INFO 0, "err":CC::STR:$a ; Use string<br />
MEND<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-7<br />
Non-Confidential
ディレクティブリファレンス<br />
7.2.3 SETA、 SETL、 SETS<br />
SETA デ ィ レ ク テ ィ ブは、 ローカル 算 術 変 数 またはグ ローバル 算 術 変 数 の 値 を<br />
設 定 し ます。<br />
SETL デ ィ レ ク テ ィ ブは、 ローカル 論 理 変 数 またはグ ローバル 論 理 変 数 の 値 を<br />
設 定 し ます。<br />
SETS デ ィ レ ク テ ィ ブは、 ローカル 文 字 列 変 数 ま たはグ ローバル 文 字 列 変 数 の<br />
値 を 設 定 し ます。<br />
構 文<br />
variable expr<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
<br />
variable<br />
expr<br />
SETA、 SETL、 または SETS のいずれかを 指 定 し ます。<br />
GBLA、 GBLL、 GBLS、 LCLA、 LCLL、 または LCLS のいずれかのディ レ ク<br />
テ ィブで 宣 言 される 変 数 の 名 前 を 指 定 します。<br />
以 下 の 式 を 指 定 し ます。<br />
• SETA の 場 合 は、 数 値 式 (「 数 値 式 」 (ページ 3-36) を 参 照 )<br />
• SETL の 場 合 は、 論 理 式 (「 論 理 式 」 (ページ 3-39) を 参 照 )<br />
• SETS の 場 合 は、 文 字 列 式 (「 文 字 列 式 」 (ページ 3-35) を 参<br />
照 )<br />
使 用 法<br />
いずれかのデ ィ レ ク テ ィ ブを 使 用 する 前 に、 グ ローバル 宣 言 デ ィ レ ク テ ィ ブ<br />
ま たはローカル 宣 言 デ ィ レ ク テ ィ ブを 使 用 し て variable を 宣 言 する 必 要 があ<br />
ります。 詳 細 については、 「GBLA、 GBLL、 GBLS」 (ページ 7-5) および<br />
「LCLA、 LCLL、 LCLS」 (ページ 7-7) を 参 照 して 下 さい。<br />
ま た、 変 数 名 はコ マン ド ラ イ ンで 事 前 に 定 義 する こ と も で き ます。 詳 細 につ<br />
いては、 「コ マン ド 構 文 」 (ページ 3-2) を 参 照 して 下 さい。<br />
例<br />
GBLA VersionNumber<br />
VersionNumber SETA 21<br />
GBLL Debug<br />
7-8 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
Debug SETL {TRUE}<br />
GBLS VersionString<br />
VersionString SETS "Version 1.0"<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-9<br />
Non-Confidential
ディレクティブリファレンス<br />
7.2.4 RELOC<br />
RELOC ディレクティブは、オブジェク トファイルで ELF の 再 配 置 を 明 示 的 にエ<br />
ンコードします。<br />
構 文<br />
RELOC n, symbol<br />
RELOC n<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
n<br />
symbol<br />
0 ~ 255 の 範 囲 内 の 値 を 指 定 する 必 要 があ り ます。<br />
任 意 のプ ロ グ ラ ム 相 対 ラベルを 指 定 で き ます。<br />
使 用 法<br />
RELOC n, symbol を 使 用 し、 symbol という ラベルの 付 いたアドレスを 基 準 にして<br />
再 配 置 を 行 います。<br />
RELOC ディレクティブを <strong>ARM</strong> 命 令 ま たは Thumb 命 令 の 直 後 に 使 用 する と 、 そ<br />
の 命 令 で 再 配 置 が 行 われます。 RELOC ディレクティブを DCB、 DCW、 DCD、 または<br />
その 他 のデータ 生 成 デ ィ レ ク テ ィ ブの 直 後 に 使 用 する と 、 データ の 開 始 位 置<br />
で 再 配 置 が 行 われます。 適 用 さ れる 加 数 は、 命 令 ま たは DCI か DCD でエンコー<br />
ドする 必 要 があり ます。<br />
アセンブラによ って 同 じ 場 所 で 既 に 再 配 置 が 行 われている 場 合 、 RELOC ディレ<br />
ク テ ィ ブの 設 定 内 容 で 再 配 置 が 更 新 さ れます。 以 下 に 例 を 示 し ます。<br />
DCD sym2 ; R_<strong>ARM</strong>_ABS32 to sym32<br />
RELOC 55 ; ... makes it R_<strong>ARM</strong>_ABS32_NOI<br />
RELOC は、 データ 生 成 デ ィ レ ク テ ィ ブ 以 外 のデ ィ レ ク テ ィ ブ、 LTORG、 ALIGN の 後<br />
に 使 用 し た り 、 AREA の 最 初 の 項 目 と し て 使 用 し た り し た 場 合 など、 その 他 す<br />
べての 場 合 に 失 敗 し ます。<br />
RELOC n を 使 用 し、 匿 名 のシンボル (シンボルテーブルのシンボル 0) を 基 準<br />
に 再 配 置 を 行 います。 以 前 にアセンブ ラ に よ って 再 配 置 が 行 われていない 場<br />
合 に RELOC n を 使 用 する と 、 匿 名 のシンボルを 基 準 に 再 配 置 が 行 われます。 詳<br />
細 については、 『Application Binary Interface for the <strong>ARM</strong> Architecture』 を 参 照 し<br />
て 下 さい。<br />
7-10 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
例<br />
IMPORT impsym<br />
LDR r0,[pc,#-8]<br />
RELOC 4, impsym<br />
DCD 0<br />
RELOC 2, sym<br />
DCD 0,1,2,3,4 ; the final word is relocated<br />
RELOC 38,sym2 ; R_<strong>ARM</strong>_TARGET1<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-11<br />
Non-Confidential
ディレクティブリファレンス<br />
7.2.5 RN<br />
RN ディレクティブは、 指 定 されたレジスタのレジスタ 名 を 定 義 します。<br />
構 文<br />
name RN expr<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
name<br />
expr<br />
レジスタに 割 り 当 てる 名 前 を 指 定 します。name には、 「 定 義 済 み<br />
のレジスタおよびコプロセッサ 名 」 (ページ 3-24) に 記 載 さ れた<br />
定 義 済 みの 名 前 と 同 じ 名 前 を 指 定 で き ません。<br />
0 ~ 15 のレジス タ 番 号 を 求 める 式 を 指 定 し ます。<br />
使 用 法<br />
RN を 使 用 して 適 切 な 名 前 をレジス タに 割 り 当 てる こ とによ り 、 各 レジス タの<br />
使 用 目 的 を 明 確 にする こ と がで き ます。 同 一 レ ジ ス タ に 複 数 の 名 前 を 付 けて<br />
矛 盾 を 生 じ さ せる よ う な 使 用 方 法 は 避 けて 下 さ い。<br />
例<br />
regname RN 11 ; defines regname for register 11<br />
sqr4 RN r6 ; defines sqr4 for register 6<br />
7-12 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.2.6 RLIST<br />
RLIST (レジスタ リ ス ト ) ディ レ クテ ィブは、 汎 用 レジスタセッ ト の 名 前 を 指<br />
定 します。<br />
構 文<br />
name RLIST {list-of-registers}<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
name<br />
レジスタセッ トに 割 り 当 てる 名 前 を 指 定 します。name には、 「 定<br />
義 済 みのレ ジ ス タおよびコ プ ロ セ ッ サ 名 」 (ページ 3-24) に 記 載<br />
さ れた 定 義 済 みの 名 前 と 同 じ 名 前 を 指 定 で き ません。<br />
list-of-registers<br />
レジスタ 名 とレジスタ 範 囲 をコンマで 区 切 って 並 べたリストを<br />
指 定 し ます。 レ ジ ス タ リ ス ト は 括 弧 で 囲 む 必 要 があ り ます。<br />
使 用 法<br />
RLIST を 使 用 して、 LDM 命 令 ま たは STM 命 令 に よ って 転 送 さ れる レ ジ ス タ セ ッ ト<br />
に 名 前 を 付 けます。<br />
LDM および STM は、 LDM 命 令 ま たは STM 命 令 に 指 定 さ れた 順 序 に 関 係 な く 、 最 も<br />
小 さ い 物 理 レ ジ ス タ 番 号 の 内 容 を、 メ モ リ 内 の 最 下 位 ア ド レ スに 格 納 し ます。<br />
シンボルレ ジ ス タ 名 を 既 に 定 義 し てい る 場 合 は、 レ ジ ス タ リ ス ト が 昇 順 で 指<br />
定 されているかど うかが 分 かりにくいこ とがあり ます。<br />
アセンブラオプシ ョ ン --diag_warning 1206 を 使 用 して、 レジス タ リ ス ト 内 のレ<br />
ジスタが 昇 順 で 指 定 されているこ とを 確 認 して 下 さい。 レジスタが 昇 順 で 指<br />
定 されていない 場 合 には、 警 告 が 生 成 されます。<br />
例<br />
Context RLIST<br />
{r0-r6,r8,r10-r12,r15}<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-13<br />
Non-Confidential
ディレクティブリファレンス<br />
7.2.7 CN<br />
CN ディ レ クテ ィブは、 コプロセッサレジスタの 名 前 を 定 義 します。<br />
構 文<br />
name CN expr<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
name<br />
expr<br />
コプロセッサレジス タに 定 義 する 名 前 を 指 定 します。 name には、<br />
「 定 義 済 みのレ ジ ス タおよびコ プ ロ セ ッ サ 名 」 (ページ 3-24) に<br />
記 載 さ れた 定 義 済 みの 名 前 と 同 じ 名 前 を 指 定 で き ません。<br />
0 ~ 15 のコプロセッサレジス タ 番 号 を 求 める 式 を 指 定 し ます。<br />
使 用 法<br />
CN を 使 用 して 適 切 な 名 前 をレジス タに 割 り 当 てる こ とによ り 、 各 レジス タの<br />
使 用 目 的 を 明 確 にする こ と がで き ます。<br />
注<br />
同 一 レ ジ ス タ に 複 数 の 名 前 を 付 けて 矛 盾 を 生 じ さ せる よ う な 使 用 方 法 は 避 け<br />
て 下 さい。<br />
c0 ~ c15 と い う 名 前 が 事 前 に 定 義 さ れています。<br />
例<br />
power CN 6 ; defines power as a symbol for<br />
; coprocessor register 6<br />
7-14 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.2.8 CP<br />
CP ディレクティブは、 指 定 されたコプロセッサの 名 前 を 定 義 します。 コプロ<br />
セッサ 番 号 には、 0 ~ 15 の 番 号 を 指 定 する 必 要 があ り ます。<br />
構 文<br />
name CP expr<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
name<br />
expr<br />
コプロセッサに 割 り 当 てる 名 前 を 指 定 します。name には、 「 定 義<br />
済 みのレ ジ ス タおよびコ プ ロ セ ッ サ 名 」 (ページ 3-24) に 記 載 さ<br />
れた 定 義 済 みの 名 前 と 同 じ 名 前 を 指 定 で き ません。<br />
0 ~ 15 のコプロセッサ 番 号 を 求 める 式 を 指 定 し ます。<br />
使 用 法<br />
CP を 使 用 して 適 切 な 名 前 を コプロセッサに 割 り 当 てる こ とによ り 、 各 コプロ<br />
セ ッ サの 使 用 目 的 を 明 確 にする こ と がで き ます。<br />
注<br />
同 一 コプロセッサに 複 数 の 名 前 を 付 けて 矛 盾 を 生 じ させる よ う な 使 用 方 法 は<br />
避 けて 下 さい。<br />
コプロセッサ 0 ~ 15 には、 p0 ~ p15 という 名 前 が 事 前 に 定 義 されています。<br />
例<br />
dmu CP 6 ; defines dmu as a symbol for<br />
; coprocessor 6<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-15<br />
Non-Confidential
ディレクティブリファレンス<br />
7.2.9 QN、 DN、 および SN<br />
QN ディレクティブは、 指 定 された 128 ビ ッ ト 拡 張 レジスタの 名 前 を 定 義 しま<br />
す。<br />
DN ディレクティブは、 指 定 された 64 ビッ ト 拡 張 レジスタの 名 前 を 定 義 しま<br />
す。<br />
SN デ ィ レ ク テ ィ ブは、 指 定 さ れた 単 精 度 VFP レジスタの 名 前 を 定 義 します。<br />
構 文<br />
name directive expr{.type}{[x]}<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
directive<br />
name<br />
expr<br />
type<br />
[x]<br />
QN、 DN、 または SN を 指 定 し ます。<br />
拡 張 レ ジ ス タ に 割 り 当 て る 名 前 を 指 定 し ます。 name には、 「 定 義<br />
済 みのレ ジ ス タおよびコ プ ロ セ ッ サ 名 」 (ページ 3-24) に 記 載 さ<br />
れた 定 義 済 みの 名 前 と 同 じ 名 前 を 指 定 で き ません。<br />
以 下 を 指 定 します。<br />
• 倍 精 度 VFPv2 レジスタまたは NEON 128 ビッ トレジスタの<br />
場 合 は 0 ~ 15、それ 以 外 の 場 合 は 0 ~ 31 の 範 囲 の 値 を 求 め<br />
る 式 。<br />
• 定 義 済 みレ ジ ス タ 名 、 ま たは 以 前 のデ ィ レ ク テ ィ ブで 定 義<br />
済 みのレ ジ ス タ 名 。<br />
「NEON データ 型 および VFP データ 型 」 (ページ 5-16) で 説 明 さ<br />
れているデータ 型 を 指 定 します。<br />
NEON コー ド でのみ 使 用 さ れます。 [x] は、 レジス タへのス カ ラ<br />
インデクスを 指 定 します。<br />
type および [x] は 拡 張 表 記 です。 詳 細 については、 「 拡 張 表 記 」 (ページ 5-20)<br />
を、 使 用 例 については、 「 拡 張 表 記 の 例 」 (ページ 7-17) を 参 照 して 下 さい。<br />
使 用 法<br />
QN、 DN、 または SN を 使 用 して 適 切 な 名 前 を 拡 張 レジス タに 割 り 当 てる こ とに<br />
よ り 、 各 レ ジ ス タ の 使 用 目 的 を 明 確 にする こ と がで き ます。<br />
7-16 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
注<br />
同 一 レ ジ ス タ に 複 数 の 名 前 を 付 けて 矛 盾 を 生 じ させる よ う な 使 用 方 法 は 避 け<br />
て 下 さい。<br />
DN ディレクティブまたは SN ディレクティブではベクタ 長 を 指 定 できません<br />
(「VFP ディレクティブとベクタ 表 記 」 (ページ 5-128) を 参 照 )。<br />
例<br />
energy DN 6 ; defines energy as a symbol for<br />
; VFP double-precision register 6<br />
mass SN 16 ; defines mass as a symbol for<br />
; VFP single-precision register 16<br />
拡 張 表 記 の 例<br />
varA DN d1.U16<br />
varB DN d2.U16<br />
varC DN d3.U16<br />
VADD varA,varB,varC ; VADD.U16 d1,d2,d3<br />
index DN d4.U16[0]<br />
result QN q5.I32<br />
VMULL result,varA,index ; VMULL.U16 q5,d1,d3[2]<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-17<br />
Non-Confidential
ディレクティブリファレンス<br />
7.3 データ 定 義 デ ィ レ クテ ィ ブ<br />
このセクションでは、 メモリの 割 り 当 て、 データ 構 造 の 定 義 、 およびメモリ<br />
の 初 期 内 容 の 設 定 を 行 う 以 下 のデ ィ レ ク テ ィ ブについて 説 明 し ます。<br />
• 「LTORG」 (ページ 7-20)<br />
リテラルプールの 起 点 を 設 定 します。<br />
• 「MAP」 (ページ 7-21)<br />
記 憶 域 マ ッ プの 起 点 を 設 定 し ます。<br />
• 「FIELD」 (ページ 7-23)<br />
記 憶 域 マ ッ プ 内 のフ ィ ール ド を 定 義 し ます。<br />
• 「SPACE または FILL」 (ページ 7-24)<br />
ゼロ 初 期 化 される メモリブロッ クを 割 り 当 てます。<br />
• 「DCB」 (ページ 7-26)<br />
バイ ト 単 位 で メ モ リ を 割 り 当 てて、 初 期 内 容 を 指 定 し ます。<br />
• 「DCD、 DCDU」 (ページ 7-27)<br />
ワー ド 単 位 で メ モ リ を 割 り 当 てて、 初 期 内 容 を 指 定 し ます。<br />
• 「DCDO」 (ページ 7-28)<br />
ワード 単 位 でメモ リ を 割 り 当 てて、 スタティ ッ クベースレジスタからの<br />
オフセ ッ ト と し て 初 期 内 容 を 指 定 し ます。<br />
• 「DCFD、 DCFDU」 (ページ 7-29)<br />
ダブルワー ド 単 位 で メ モ リ を 割 り 当 てて、 倍 精 度 浮 動 小 数 点 数 と し て 初<br />
期 内 容 を 指 定 し ます。<br />
• 「DCFS、 DCFSU」 (ページ 7-30)<br />
ワー ド 単 位 で メ モ リ を 割 り 当 てて、 単 精 度 浮 動 小 数 点 数 と し て 初 期 内 容<br />
を 指 定 し ます。<br />
• 「DCI」 (ページ 7-31)<br />
ワー ド 単 位 で メ モ リ を 割 り 当 てて、 初 期 内 容 を 指 定 し ます。 メモリ 位 置<br />
をデータではな く コード と してマーク し ます。<br />
• 「DCQ、 DCQU」 (ページ 7-33)<br />
ダブルワー ド 単 位 で メ モ リ を 割 り 当 てて、 64 ビ ッ ト 整 数 と し て 初 期 内<br />
容 を 指 定 し ます。<br />
7-18 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
• 「DCW、 DCWU」 (ページ 7-34)<br />
ハーフ ワー ド 単 位 で メ モ リ を 割 り 当 てて、 初 期 内 容 を 指 定 し ます。<br />
• 「COMMON」 (ページ 7-35)<br />
ブ ロ ッ ク 単 位 で メ モ リ をシンボルに 割 り 当 てて、 境 界 調 整 を 指 定 し ま<br />
す。<br />
• 「DATA」 (ページ 7-35)<br />
コードセクシ ョ ン 内 のデータをマーク します。 このディレクティブは、<br />
下 位 互 換 性 を 維 持 する 目 的 だけでサポー ト さ れています。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-19<br />
Non-Confidential
ディレクティブリファレンス<br />
7.3.1 LTORG<br />
LTORG デ ィ レ ク テ ィ ブは、 現 在 の リ テ ラルプールをすぐにアセンブルする よ う<br />
アセンブラに 指 示 します。<br />
構 文<br />
LTORG<br />
使 用 法<br />
アセンブ ラ は、 各 コー ド セ ク シ ョ ンの 終 了 位 置 で 現 在 の リ テ ラ ルプールを ア<br />
センブルします。 コー ド セ ク シ ョ ンの 終 了 位 置 は、 次 のセ ク シ ョ ンの 先 頭 に<br />
ある AREA ディレクティブによって 決 まるか、 またはアセンブリの 終 了 位 置 と<br />
なります。<br />
このよ うなデフォルトのリテラルプールは、LDR、 VLDR、 および WLDR 疑 似 命 令<br />
の 範 囲 外 にな る 場 合 があ り ます。 リ テ ラ ルプールが 範 囲 内 でアセンブル さ れ<br />
てい る こ と を 確 認 する には、 LTORG を 使 用 し ます。 擬 似 命 令 の 詳 細 については、<br />
以 下 を 参 照 して 下 さい。<br />
• 「LDR 疑 似 命 令 」 (ページ 4-170)<br />
• 「VLDR 疑 似 命 令 」 (ページ 5-96)<br />
• 「ワイヤレス MMX ロード / ストア 命 令 」 (ページ 6-6)<br />
大 きなプロ グ ラ ムでは、 複 数 の リ テ ラルプールが 必 要 にな る 場 合 があ り ます。<br />
定 数 がプ ロ セ ッ サに よ って 命 令 と し て 実 行 さ れない よ う に、 LTORG ディレク<br />
テ ィ ブは、 無 条 件 分 岐 ま たはサブルーチン 復 帰 命 令 の 後 に 配 置 し て 下 さ い。<br />
リテラルプール 内 のデータは、 アセンブラによってワード 境 界 で 整 列 されま<br />
す。<br />
例<br />
AREA Example, CODE, READONLY<br />
start BL func1<br />
func1<br />
; function body<br />
; code<br />
LDR r1,=0x55555555 ; => LDR R1, [pc, #offset to Literal Pool 1]<br />
; code<br />
MOV pc,lr ; end function<br />
LTORG<br />
; Literal Pool 1 contains literal &55555555.<br />
data SPACE 4200 ; Clears 4200 bytes of memory,<br />
; starting at current location.<br />
END<br />
; Default literal pool is empty.<br />
7-20 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.3.2 MAP<br />
MAP デ ィ レ ク テ ィ ブは、 指 定 さ れたア ド レ ス を 記 憶 域 マ ッ プの 起 点 と し て 設 定<br />
します。 記 憶 域 マ ッ プの 位 置 カ ウ ン タ {VAR} には、 同 じア ド レ スが 設 定 されま<br />
す。 ^ は MAP と 同 じ 意 味 です。<br />
構 文<br />
MAP expr{,base-register}<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
expr<br />
数 値 式 ま たはプ ロ グ ラ ム 相 対 式 を 指 定 し ます。<br />
• base-register が 指 定 されていない 場 合 は、 expr によって 記<br />
憶 域 マ ッ プの 開 始 ア ド レ スが 求 め られます。 記 憶 域 マ ッ プ<br />
の 位 置 カ ウ ン タには、 同 じ ア ド レ スが 設 定 されます。<br />
• expr にプ ロ グ ラ ム 相 対 式 が 指 定 さ れてい る 場 合 、 マ ッ プ 内<br />
で ラベルを 使 用 する には、 ラベルを 事 前 に 定 義 し てお く 必<br />
要 があ り ます。 マップでは、 アセンブラの 最 初 のパスでラ<br />
ベルを 定 義 する 必 要 があ り ます。<br />
base-register<br />
レジスタを 指 定 します。 base-register が 指 定 されている 場 合 、 記<br />
憶 域 マ ッ プの 開 始 ア ド レ スは、 expr と、 ランタイムの<br />
base-register の 値 の 合 計 にな り ます。<br />
使 用 法<br />
記 憶 域 マ ッ プを 記 述 する には、 MAP ディレクティブを FIELD ディレクティブと<br />
組 み 合 わせて 使 用 し ます。<br />
base-register を 指 定 してレジスタ 相 対 ラベルを 定 義 します。 次 の MAP ディレク<br />
テ ィ ブが 出 現 する まで、 こ のベース レ ジ ス タ が、 後 続 の FIELD ディレクティブ<br />
で 定 義 されるすべてのラベル 内 で 暗 黙 的 に 使 用 されます。 レジスタ 相 対 ラベ<br />
ルは、 ロー ド 命 令 と ス ト ア 命 令 で 使 用 で き ます。 この 例 については、「FIELD」<br />
(ページ 7-23) を 参 照 して 下 さい。<br />
MAP デ ィ レ ク テ ィ ブを 複 数 回 使 用 する こ と に よ り 、 複 数 の 記 憶 域 マ ッ プを 定 義<br />
できます。<br />
最 初 の MAP ディレクティブが 使 用 されるまで、{VAR} カウンタにはゼロが 設 定<br />
されます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-21<br />
Non-Confidential
ディレクティブリファレンス<br />
例<br />
MAP 0,r9<br />
MAP 0xff,r9<br />
7-22 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.3.3 FIELD<br />
FIELD ディレクティブは、MAP デ ィ レ ク テ ィ ブを 使 用 し て 定 義 さ れた 記 憶 域<br />
マップ 内 の 空 間 を 定 義 し ます。 # は FIELD と 同 じ 意 味 です。<br />
構 文<br />
{label} FIELD expr<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
label<br />
expr<br />
ラベルを 指 定 し ます ( 省 略 可 )。 指 定 さ れてい る 場 合 は、 label に<br />
記 憶 域 マ ッ プの 位 置 カ ウ ン タ {VAR} の 値 が 割 り 当 て られます。 そ<br />
の 後 、 記 憶 域 マ ッ プの 位 置 カ ウ ン タは、 expr の 値 でイ ン ク リ メ ン<br />
トされます。<br />
記 憶 域 マ ッ プの 位 置 カ ウ ン タ を イ ン ク リ メ ン ト するバイ ト 数 を<br />
求 める 式 を 指 定 します。<br />
使 用 法<br />
記 憶 域 マ ッ プが base-register を 指 定 する MAP ディレクティブによって 設 定 され<br />
ている 場 合 は、 次 の MAP ディレクティブが 出 現 するまで、 このベースレジス<br />
タが、 後 続 の FIELD ディレクティブで 定 義 されるすべてのラベル 内 で 暗 黙 的 に<br />
使 用 さ れます。 これら のレ ジ ス タ 相 対 ラベルは、 ロー ド 命 令 と ス ト ア 命 令 で<br />
使 用 で き ます (「MAP」 (ページ 7-21) を 参 照 )。<br />
例<br />
以 下 の 例 は、 MAP ディレクティブと FIELD ディレクティブを 使 用 してレジスタ<br />
相 対 ラベルを 定 義 する 方 法 を 示 し ています。<br />
MAP 0,r9 ; set {VAR} to the address stored in r9<br />
FIELD 4 ; increment {VAR} by 4 bytes<br />
Lab FIELD 4 ; set Lab to the address [r9 + 4]<br />
; and then increment {VAR} by 4 bytes<br />
LDR r0,Lab ; equivalent to LDR r0,[r9,#4]<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-23<br />
Non-Confidential
ディレクティブリファレンス<br />
7.3.4 SPACE または FILL<br />
SPACE ディレクティブは、 ゼロ 初 期 化 されるメモリブロックを 予 約 します。 %<br />
は SPACE と 同 じ 意 味 です。<br />
FILL ディレクティブは、 所 定 の 値 で 埋 めるメモリブロックを 予 約 します。<br />
構 文<br />
{label} SPACE expr<br />
{label} FILL expr{,value{,valuesize}}<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
label ラベルを 指 定 し ます ( 省 略 可 )。<br />
expr<br />
value<br />
valuesize<br />
埋 め る かゼ ロ 初 期 化 するバイ ト の 数 を 求 め る 式 を 指 定 し ます<br />
(「 数 値 式 」 (ページ 3-36) を 参 照 )。<br />
確 保 し たバ イ ト を 埋 め る 値 に 評 価 さ れます。 value はオプシ ョ ン<br />
であ り、 省 略 された 場 合 には、 0 にな り ます。 NOINIT 領 域 では<br />
value である 必 要 があ り ます。<br />
value のサ イ ズ (バ イ ト 数 単 位 )。 1、 2、 および 4 のいずれかの 値<br />
を 取 り ます。 valuesize はオプシ ョ ンであ り 、 省 略 された 場 合 に<br />
は、 1 にな り ます。<br />
使 用 法<br />
SPACE または FILL ディ レ クテ ィブの 後 のコードの 境 界 を 整 列 するには、 ALIGN<br />
ディレクティブを 使 用 します。 詳 細 については、 「ALIGN」 (ページ 7-78) を<br />
参 照 し て 下 さ い。<br />
以 下 も 参 照 し て 下 さ い。<br />
• 「DCB」 (ページ 7-26)<br />
• 「DCD、 DCDU」 (ページ 7-27)<br />
• 「DCDO」 (ページ 7-28)<br />
• 「DCW、 DCWU」 (ページ 7-34)<br />
7-24 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
例<br />
AREA MyData, DATA, READWRITE<br />
data1 SPACE 255 ; defines 255 bytes of zeroed store<br />
data2 FILL 50,0xAB,1 ; defines 50 bytes containing 0xAB<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-25<br />
Non-Confidential
ディレクティブリファレンス<br />
7.3.5 DCB<br />
DCB デ ィ レ ク テ ィ ブは、 バ イ ト 単 位 で メ モ リ を 割 り 当 てて、 実 行 時 の メ モ リ の<br />
初 期 内 容 を 定 義 し ます。 = は DCB と 同 じ 意 味 です。<br />
構 文<br />
{label} DCB expr{,expr}...<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
expr<br />
以 下 のいずれかを 指 定 し ます。<br />
• -128 ~ 255 の 範 囲 の 整 数 を 求 め る 数 値 式 (「 数 値 式 」 (ペー<br />
ジ 3-36) を 参 照 )。<br />
• 引 用 符 で 囲 まれた 文 字 列 。 文 字 列 中 の 文 字 はス ト アの 連 続<br />
したバイ トにロードされます。<br />
使 用 法<br />
DCB の 後 に 命 令 が 続 く 場 合 、 ALIGN ディ レ クテ ィブを 使 用 して 命 令 を 整 列 させ<br />
て 下 さい。 詳 細 については、 「ALIGN」 (ページ 7-78) を 参 照 して 下 さい。<br />
以 下 も 参 照 し て 下 さ い。<br />
• 「DCD、 DCDU」 (ページ 7-27)<br />
• 「DCQ、 DCQU」 (ページ 7-33)<br />
• 「DCW、 DCWU」 (ページ 7-34)<br />
• 「SPACE または FILL」 (ページ 7-24)<br />
例<br />
C 言 語 の 文 字 列 と は 異 な り 、 <strong>ARM</strong> アセンブ ラ の 文 字 列 の 終 端 は NULL ではあ<br />
りません。 終 端 が NULL の C 言 語 の 文 字 列 は、 DCB を 以 下 のよ う に 使 用 して 作<br />
成 でき ます。<br />
C_string<br />
DCB "C_string",0<br />
7-26 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.3.6 DCD、 DCDU<br />
DCD ディレクティブは、 ワード 単 位 でメモリを 割 り 当 てて 4 バイ ト 境 界 で 整 列<br />
させ、 実 行 時 の メ モ リ の 初 期 内 容 を 定 義 し ます。<br />
& は DCD と 同 じ 意 味 です。<br />
メ モ リ の 境 界 調 整 が 任 意 であ る 点 を 除 き、 DCDU も 同 じです。<br />
構 文<br />
{label} DCD{U} expr{,expr}<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
expr<br />
以 下 のいずれかを 指 定 し ます。<br />
• 数 値 式 (「 数 値 式 」 (ページ 3-36) を 参 照 )<br />
• プログラム 相 対 式<br />
使 用 法<br />
DCD は、 必 要 に 応 じ て、 最 初 に 定 義 されたワード の 前 に 最 大 3 バイ トのパディ<br />
ングを 挿 入 し て、 境 界 調 整 を 4 バイ トにします。<br />
境 界 調 整 が 不 要 な 場 合 は、 DCDU を 使 用 して 下 さい。<br />
以 下 も 参 照 し て 下 さ い。<br />
• 「DCB」 (ページ 7-26)<br />
• 「DCI」 (ページ 7-31)<br />
• 「DCW、 DCWU」 (ページ 7-34)<br />
• 「DCQ、 DCQU」 (ページ 7-33)<br />
• 「SPACE または FILL」 (ページ 7-24)<br />
例<br />
data1 DCD 1,5,20 ; Defines 3 words containing<br />
; decimal values 1, 5, and 20<br />
data2 DCD mem06 + 4 ; Defines 1 word containing 4 +<br />
; the address of the label mem06<br />
AREA MyData, DATA, READWRITE<br />
DCB 255 ; Now misaligned ...<br />
data3 DCDU 1,5,20 ; Defines 3 words containing<br />
; 1, 5 and 20, not word aligned<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-27<br />
Non-Confidential
ディレクティブリファレンス<br />
7.3.7 DCDO<br />
DCDO ディレクティブは、 ワード 単 位 でメモリを 割 り 当 てて、 4 バイ ト 境 界 で<br />
整 列 させ、 実 行 時 の メ モ リ の 初 期 内 容 を スタティックベースレジスタ sb<br />
(r9) からのオフセッ ト と して 定 義 します。<br />
構 文<br />
{label} DCDO expr{,expr}...<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
expr<br />
レ ジ ス タ 相 対 式 ま たは ラベルを 指 定 し ます。 ベース レ ジ ス タ には<br />
sb を 指 定 する 必 要 があ り ます。<br />
使 用 法<br />
DCDO を 使 用 し て、 ス タ テ ィ ッ クベース レ ジ ス タ と 相 対 的 な 再 配 置 可 能 ア ド レ<br />
スのためにメモリ 内 の 空 間 を 割 り 当 てます。<br />
例<br />
IMPORT externsym<br />
DCDO externsym ; 32-bit word relocated by offset of<br />
; externsym from base of SB section.<br />
7-28 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.3.8 DCFD、 DCFDU<br />
DCFD デ ィ レ ク テ ィ ブは、 ワー ド 境 界 で 整 列 さ れた 倍 精 度 浮 動 小 数 点 数 に メ モ<br />
リ を 割 り 当 て、 実 行 時 の メ モ リ の 初 期 内 容 を 定 義 し ます。 倍 精 度 浮 動 小 数 点<br />
数 には 2 ワー ド が 使 用 さ れます。 こ の 2 ワー ド を 算 術 演 算 で 使 用 するには、<br />
ワード 境 界 で 整 列 させる 必 要 があ り ます。<br />
メ モ リ の 境 界 調 整 が 任 意 であ る 点 を 除 き、 DCFDU も 同 じです。<br />
構 文<br />
{label} DCFD{U} fpliteral{,fpliteral}...<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
fpliteral<br />
倍 精 度 浮 動 小 数 点 リ テ ラルを 指 定 し ます (「 浮 動 小 数 点 リ テ ラ<br />
ル」 (ページ 3-38) を 参 照 )。<br />
使 用 法<br />
アセンブ ラ は、 必 要 に 応 じ て、 最 初 に 定 義 さ れた 数 値 の 前 に 最 大 3 バイ トの<br />
パデ ィ ングを 挿 入 し て、 境 界 調 整 を 4 バイ トにします。<br />
境 界 調 整 が 不 要 な 場 合 は、 DCFDU を 使 用 して 下 さい。<br />
fpliteral を 内 部 形 式 に 変 換 する 場 合 に 使 用 さ れる ワー ド の 順 序 は、 選 択 さ れ<br />
た 浮 動 小 数 点 アーキテ ク チャ に よ って 制 御 さ れます。 --fpu none オプシ ョ ンを<br />
選 択 する と 、 DCFD および DCFDU は 使 用 でき ません。<br />
倍 精 度 数 値 の 範 囲 は 以 下 の と お り です。<br />
• 最 大 : 1.79769313486231571e+308<br />
• 最 小 : 2.22507385850720138e–308<br />
「DCFS、 DCFSU」 (ページ 7-30) も 参 照 して 下 さい。<br />
例<br />
DCFD<br />
DCFDU<br />
1E308,-4E-100<br />
10000,-.1,3.1E26<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-29<br />
Non-Confidential
ディレクティブリファレンス<br />
7.3.9 DCFS、 DCFSU<br />
DCFS デ ィ レ ク テ ィ ブは、 ワー ド 境 界 で 整 列 さ れた 単 精 度 浮 動 小 数 点 数 に メ モ<br />
リ を 割 り 当 てて、 実 行 時 の メ モ リ の 初 期 内 容 を 定 義 し ます。 単 精 度 浮 動 小 数<br />
点 数 には 1 ワー ド が 使 用 さ れます。 こ の 1 ワー ド を 算 術 演 算 で 使 用 するには、<br />
ワー ド 境 界 で 整 列 さ せる 必 要 があ り ます。<br />
メ モ リ の 境 界 調 整 が 任 意 であ る 点 を 除 き、 DCFSU も 同 じです。<br />
構 文<br />
{label} DCFS{U} fpliteral{,fpliteral}...<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
fpliteral<br />
単 精 度 浮 動 小 数 点 リ テ ラ ルを 指 定 し ます (「 浮 動 小 数 点 リ テ ラ<br />
ル」 (ページ 3-38) を 参 照 )。<br />
使 用 法<br />
DCFS は、 必 要 に 応 じ て、 最 初 に 定 義 された 数 値 の 前 に 最 大 3 バイ トのパディ<br />
ングを 挿 入 し て、 境 界 調 整 を 4 バイ トにします。<br />
境 界 調 整 が 不 要 な 場 合 は、 DCFSU を 使 用 して 下 さい。<br />
単 精 度 数 値 の 範 囲 は 以 下 の と お り です。<br />
• 最 大 : 3.40282347e+38<br />
• 最 小 : 1.17549435e–38<br />
「DCFD、 DCFDU」 (ページ 7-29) も 参 照 して 下 さい。<br />
例<br />
DCFS<br />
DCFSU<br />
1E3,-4E-9<br />
1.0,-.1,3.1E6<br />
7-30 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.3.10 DCI<br />
<strong>ARM</strong> コードでは、 DCI デ ィ レ ク テ ィ ブは、 ワー ド 単 位 で メ モ リ を 割 り 当 てて、<br />
4 バ イ ト 境 界 で 整 列 させ、 実 行 時 の メ モ リ の 初 期 内 容 を 定 義 し ます。<br />
Thumb コードでは、 DCI ディレクティブは、 ハーフワード 単 位 でメモリを 割 り<br />
当 てて、 2 バイ ト 境 界 で 整 列 させ、 実 行 時 の メ モ リ の 初 期 内 容 を 定 義 し ます。<br />
構 文<br />
{label} DCI{.W} expr{,expr}<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
expr 数 値 式 を 指 定 し ます (「 数 値 式 」 (ページ 3-36) を 参 照 )。<br />
.W 指 定 さ れてい る 場 合 は、 Thumb コードに 4 バ イ ト を 挿 入 する 必<br />
要 があ る こ と を 示 し ます。<br />
使 用 法<br />
DCI ディレクティブは、DCD ディレクティブや DCW ディレクティブとよく 似 てい<br />
ますが、 メモ リ 位 置 はデータではな く コード と してマーク されます。 使 用 し<br />
ているアセンブラのバージ ョ ンでサポー ト されていない 新 しい 命 令 のマク ロ<br />
を 記 述 する 場 合 は、 DCI を 使 用 して 下 さい。<br />
<strong>ARM</strong> コードでは、 DCI は、 必 要 に 応 じ て、 最 初 に 定 義 されたワード の 前 に 最<br />
大 3 バイ ト のパデ ィ ングを 挿 入 し て、 境 界 調 整 を 4 バイ トにします。 Thumb<br />
コードでは、 DCI は、 必 要 に 応 じ て、 先 頭 バイ ト のパデ ィ ングを 挿 入 し て、 境<br />
界 調 整 を 2 バイ トにします。<br />
DCI を 使 用 し て、 ビ ッ ト パ ターン を 命 令 ス ト リ ームに 挿 入 で き ます。 例 えば、<br />
以 下 を 使 用 し ます。<br />
DCI 0x46c0<br />
Thumb 演 算 MOV r8,r8 が 挿 入 されます。<br />
「DCD、 DCDU」 (ページ 7-27) および「DCW、 DCWU」 (ページ 7-34) も 参<br />
照 して 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-31<br />
Non-Confidential
ディレクティブリファレンス<br />
例<br />
MACRO<br />
newinst<br />
DCI<br />
MEND<br />
; this macro translates newinstr Rd,Rm<br />
; to the appropriate machine code<br />
$Rd,$Rm<br />
0xe16f0f10 :OR: ($Rd:SHL:12) :OR: $Rm<br />
Thumb-2 の 例<br />
DCI.W 0xf3af8000 ; inserts 32-bit NOP, 2-byte aligned.<br />
7-32 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.3.11 DCQ、 DCQU<br />
DCQ ディレクティブは、 8 バイ ト 単 位 でメモリブロッ クを 割 り 当 てて、 4 バイ<br />
ト 境 界 で 整 列 させ、 実 行 時 の メ モ リ の 初 期 内 容 を 定 義 し ます。<br />
メ モ リ の 境 界 調 整 が 任 意 であ る 点 を 除 き、 DCQU も 同 じです。<br />
構 文<br />
{label} DCQ{U} {-}literal{,{-}literal}...<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
literal<br />
64 ビッ トの 数 値 リテラルを 指 定 します (「 数 値 リ テ ラ ル」 (ペー<br />
ジ 3-37) を 参 照 )。<br />
こ の 値 の 有 効 範 囲 は 0 ~ 2 64 -1 です。<br />
数 値 リ テ ラ ルで 通 常 使 用 で き る 文 字 に 加 え、 literal の 先 頭 にマ<br />
イナス 符 号 を 付 けるこ とができます。 こ の 場 合 の 値 の 有 効 範 囲 は<br />
-2 63 ~ -1 となります。<br />
-n を 指 定 した 場 合 は、 2 64 –n を 指 定 した 場 合 と 同 じ 結 果 が 得 られ<br />
ます。<br />
使 用 法<br />
DCQ は、 必 要 に 応 じ て、 最 初 に 定 義 さ れた 8 バイ ト のブロ ッ ク の 前 に 最 大 3 バ<br />
イ ト のパデ ィ ングを 挿 入 し て、 境 界 調 整 を 4 バイ トにします。<br />
境 界 調 整 が 不 要 な 場 合 は、 DCQU を 使 用 して 下 さい。<br />
以 下 も 参 照 し て 下 さ い。<br />
• 「DCB」 (ページ 7-26)<br />
• 「DCD、 DCDU」 (ページ 7-27)<br />
• 「DCW、 DCWU」 (ページ 7-34)<br />
• 「SPACE または FILL」 (ページ 7-24)<br />
例<br />
AREA MiscData, DATA, READWRITE<br />
data DCQ -225,2_101 ; 2_101 means binary 101.<br />
DCQU number+4 ; number must already be defined.<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-33<br />
Non-Confidential
ディレクティブリファレンス<br />
7.3.12 DCW、 DCWU<br />
DCW ディレクティブは、 ハーフワード 単 位 でメモリを 割 り 当 てて、 2 バイ ト 境<br />
界 で 整 列 させ、 実 行 時 の メ モ リ の 初 期 内 容 を 定 義 し ます。<br />
メ モ リ の 境 界 調 整 が 任 意 であ る 点 を 除 き、 DCWU も 同 じです。<br />
構 文<br />
{label} DCW{U} expr{,expr}...<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
expr<br />
-32768 ~ 65535 の 範 囲 の 整 数 を 求 め る 数 値 式 を 指 定 し ます (「 数<br />
値 式 」 (ページ 3-36) を 参 照 )。<br />
使 用 法<br />
DCW は、 必 要 に 応 じ て、 最 初 に 定 義 されたハーフ ワード の 前 に 1 バイ トのパ<br />
デ ィ ン グ を 挿 入 し て、 境 界 調 整 を 2 バイ トにします。<br />
境 界 調 整 が 不 要 な 場 合 は、 DCWU を 使 用 して 下 さい。<br />
以 下 も 参 照 し て 下 さ い。<br />
• 「DCB」 (ページ 7-26)<br />
• 「DCD、 DCDU」 (ページ 7-27)<br />
• 「DCQ、 DCQU」 (ページ 7-33)<br />
• 「SPACE または FILL」 (ページ 7-24)<br />
例<br />
data DCW -225,2*number ; number must already be defined<br />
DCWU number+4<br />
7-34 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.3.13 COMMON<br />
COMMON ディレクティブは、 定 義 されたサイズのメモリブロックを、 指 定 した<br />
シンボルで 割 り 当 てます。 メ モ リ の 整 列 方 法 を 指 定 し ます。 境 界 調 整 を 省 略 し<br />
た 場 合 、 デフ ォル ト の 境 界 調 整 は 4 にな り ます。 また、 サイズを 省 略 した 場<br />
合 、 デフ ォル ト のサ イ ズは 0 にな り ます。<br />
このメモリには 他 のメモリ と 同 様 にアクセスできますが、 オブジェク ト ファ<br />
イルに 領 域 は 割 り 当 てられません。<br />
構 文<br />
COMMON symbol{,size{,alignment}}<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
symbol<br />
size<br />
alignment<br />
シンボル 名 を 指 定 し ます。 シンボル 名 では 大 文 字 と 小 文 字 が 区 別<br />
されます。<br />
予 約 するバイ ト 数 を 指 定 し ます。<br />
境 界 調 整 を 指 定 し ます。<br />
使 用 法<br />
リ ンカは、 リ ン ク 段 階 で、 必 要 な 領 域 をゼロで 初 期 化 された メ モ リ と し て 割<br />
り 当 てます。<br />
例<br />
COMMON xyz,255,4 ; defines 255 bytes of ZI store, word-aligned<br />
7.3.14 DATA<br />
DATA ディレクティブは 必 要 なくなりました。 このディレクティブはアセンブ<br />
ラによって 無 視 されます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-35<br />
Non-Confidential
ディレクティブリファレンス<br />
7.4 アセンブリ 制 御 ディ レクテ ィ ブ<br />
こ のセ ク シ ョ ンでは、 条 件 付 き アセンブ リ 、 ループ、 イ ン ク ルー ド 、 および<br />
マ ク ロ を 制 御 する 以 下 のデ ィ レ ク テ ィ ブについて 説 明 し ます。<br />
• 「MACRO、 MEND」 (ページ 7-37)<br />
• 「MEXIT」 (ページ 7-41)<br />
• 「IF、 ELSE、 ENDIF、 ELIF」 (ページ 7-42)<br />
• 「WHILE、 WEND」 (ページ 7-45)<br />
7.4.1 ネスティングディレクティブ<br />
以 下 の 構 造 は 合 計 で 256 の 深 さ までネス ト でき ます。<br />
• MACRO 定 義<br />
• WHILE...WEND ループ<br />
• IF...ELSE...ENDIF 条 件 構 造<br />
• INCLUDE ファイルインクルード<br />
こ れら の 構 造 がどの よ う にネ ス ト さ れてい る かに 関 係 な く 、 上 記 の 制 限 はネ<br />
ス ト さ れた 構 造 全 体 に 適 用 さ れます。 各 構 造 の 制 限 が 256 ではあ り ません。<br />
7-36 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.4.2 MACRO、 MEND<br />
MACRO デ ィ レ ク テ ィ ブは、 マ ク ロ 定 義 の 開 始 位 置 をマー ク し ます。 マクロ 定 義<br />
は、 MEND ディレクティブで 終 了 します。 詳 細 については、 「マ ク ロの 使 用 」<br />
(ページ 2-50) を 参 照 して 下 さい。<br />
構 文<br />
マクロの 定 義 には 2 つのデ ィ レ ク テ ィ ブを 使 用 し ます。 構 文 は 以 下 の と お り で<br />
す。<br />
MACRO<br />
{$label} macroname{$cond} {$parameter{,$parameter}...}<br />
; code<br />
MEND<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
$label<br />
macroname<br />
$cond<br />
$parameter<br />
マ ク ロ が 呼 び 出 さ れた と き に、 指 定 さ れたシンボルが 代 入 さ れ<br />
るパラ メータを 指 定 します。 通 常 、 こ のシンボルは ラベルです。<br />
マクロの 名 前 を 指 定 します。 命 令 ま たはデ ィ レ ク テ ィ ブの 名 前 で<br />
始 まる 名 前 は 付 けられません。<br />
条 件 コー ド を 含 んでい る よ う に 設 計 さ れた 特 別 なパ ラ メ ータ で<br />
す。 有 効 な 条 件 コー ド 以 外 の 値 も 許 可 さ れます。<br />
マ ク ロが 呼 び 出 された と きに 値 が 代 入 されるパラ メ ータ を 指 定<br />
します。 パラ メータのデフォル ト 値 は、 以 下 の 形 式 を 使 用 して 設<br />
定 でき ます。<br />
$parameter="default value"<br />
デフォル ト 値 にスペースが 含 まれているか、 または 値 の 前 後 の<br />
いずれかにスペースがあ る 場 合 は、 二 重 引 用 符 を 使 用 する 必 要<br />
があ り ます。<br />
使 用 法<br />
マクロ 内 で WHILE...WEND ループま たは IF...ENDIF 条 件 を 始 める 場 合 は、 MEND<br />
デ ィ レ ク テ ィ ブに 到 達 する 前 に こ のループま たは 条 件 を 閉 じ る 必 要 があ り ま<br />
す。 ループ 内 からの 終 了 時 など、 マクロからの 早 期 終 了 を 可 能 にする 必 要 が<br />
ある 場 合 は、 「MEXIT」 (ページ 7-41) を 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-37<br />
Non-Confidential
ディレクティブリファレンス<br />
マクロボディ 内 では、$label、 $parameter または $cond などのパラ メータは 他 の<br />
変 数 と 同 じ よ う に 使 用 で き ます (「アセンブ リ 時 の 変 数 代 入 」 (ページ 3-31)<br />
を 参 照 )。 これらのパラ メータには、 マクロが 呼 び 出 されるたびに 新 しい 値 が<br />
渡 されます。 パラ メータを 通 常 のシンボルと 区 別 するには、 先 頭 に $ を 付 ける<br />
必 要 があ り ます。 パラ メ ータはい く つでも 使 用 でき ます。<br />
$label は 省 略 可 能 ですが、 マ ク ロによ って 内 部 ラベルが 定 義 される 場 合 に 役 立<br />
ちます。 このラベルは、 マクロへのパラ メータとして 処 理 されますが、 必 ずし<br />
も、 マ ク ロ 拡 張 の 最 初 の 命 令 を 表 す 必 要 はあ り ません。 マクロでは、 すべて<br />
のラベルの 位 置 が 定 義 されます。<br />
パ ラ メ ータ のデフ ォル ト 値 を 使 用 するには、 | を 引 数 と し て 使 用 し ます。 この<br />
引 数 が 省 略 さ れてい る 場 合 は、 空 の 文 字 列 が 使 用 さ れます。<br />
複 数 の 内 部 ラベルを 使 用 する マ ク ロ では、 各 内 部 ラベルを、 異 な る 接 尾 文 字<br />
の 付 いたベース ラベル と し て 定 義 する と 役 立 ち ます。<br />
拡 張 にスペースが 不 要 な 場 合 には、 パ ラ メ ータ と それに 続 く テキ ス ト の 間 、<br />
またはパラメータとパラメータの 間 にはドット (.) を 使 用 します。 ただし、<br />
パラ メータ とその 前 のテキス トの 間 にはド ッ トは 使 用 しないで 下 さい。<br />
条 件 コー ド には、$cond パラ メータを 使 用 できます。 単 項 演 算 子 :REVERSE_CC: を<br />
使 用 し て、 条 件 コー ド の 逆 数 を 検 索 し、 :CC_ENCODING: を 使 用 して、 条 件 コー<br />
ドの 4 ビ ッ ト エン コーデ ィ ン グ を 検 索 し ます。<br />
マ ク ロ では、 ローカル 変 数 の 有 効 範 囲 を 定 義 し ます (「LCLA、 LCLL、 LCLS」<br />
(ページ 7-7) を 参 照 )。<br />
マクロはネス トできます (「ネステ ィ ングデ ィ レ ク テ ィ ブ」 (ページ 7-36) を<br />
参 照 )。<br />
例<br />
; macro definition<br />
MACRO<br />
$label xmac $p1,$p2<br />
; code<br />
$label.loop1 ; code<br />
; code<br />
BGE $label.loop1<br />
$label.loop2 ; code<br />
BL $p1<br />
BGT $label.loop2<br />
; code<br />
ADR $p2<br />
; start macro definition<br />
7-38 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
; code<br />
MEND<br />
; end macro definition<br />
; macro invocation<br />
abc xmac subr1,de ; invoke macro<br />
; code ; this is what is<br />
abcloop1 ; code ; is produced when<br />
; code ; the xmac macro is<br />
BGE abcloop1 ; expanded<br />
abcloop2 ; code<br />
BL subr1<br />
BGT abcloop2<br />
; code<br />
ADR de<br />
; code<br />
マク ロを 使 用 したアセンブ リ 時 の 診 断 を 以 下 に 示 し ます。<br />
MACRO<br />
; Macro definition<br />
diagnose $param1="default" ; This macro produces<br />
INFO 0,"$param1" ; assembly-time diagnostics<br />
MEND<br />
; (on second assembly pass)<br />
; macro expansion<br />
diagnose<br />
; Prints blank line at assembly-time<br />
diagnose "hello" ; Prints "hello" at assembly-time<br />
diagnose |<br />
; Prints "default" at assembly-time<br />
条 件 付 き マ ク ロの 例<br />
AREA codx, CODE, READONLY<br />
; macro definition<br />
MACRO<br />
Return$cond<br />
[ {ARCHITECTURE} "4"<br />
BX$cond lr<br />
|<br />
MOV$cond pc,lr<br />
]<br />
MEND<br />
; macro invocation<br />
fun<br />
PROC<br />
CMP<br />
MOVEQ<br />
ReturnEQ<br />
MOV<br />
Return<br />
r0,#0<br />
r0,#1<br />
r0,#0<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-39<br />
Non-Confidential
ディレクティブリファレンス<br />
ENDP<br />
END<br />
7-40 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.4.3 MEXIT<br />
MEXIT デ ィ レ ク テ ィ ブは、 マ ク ロ 定 義 の 終 了 位 置 に 到 達 する 前 にマ ク ロ を 終 了<br />
する 場 合 に 使 用 し ます。<br />
使 用 法<br />
MEXIT は、 マ ク ロ 本 体 の 中 か ら 終 了 する 必 要 があ る 場 合 に 使 用 し ます。 マクロ<br />
本 体 の 中 で 閉 じ られていない WHILE...WEND ループま たは IF...ENDIF 条 件 は、 マ<br />
ク ロ が 終 了 する 前 にアセンブ ラ に よ って 閉 じ ら れます。<br />
「MACRO、 MEND」 (ページ 7-37) も 参 照 して 下 さい。<br />
例<br />
MACRO<br />
$abc example abc $param1,$param2<br />
; code<br />
WHILE condition1<br />
; code<br />
IF condition2<br />
; code<br />
MEXIT<br />
ELSE<br />
; code<br />
ENDIF<br />
WEND<br />
; code<br />
MEND<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-41<br />
Non-Confidential
ディレクティブリファレンス<br />
7.4.4 IF、 ELSE、 ENDIF、 ELIF<br />
IF ディレクティブは、 命 令 とディレクティブのシーケンスをアセンブルする<br />
かど う かを 決 める 条 件 を 定 義 し ます。 [ は IF と 同 じ 意 味 です。<br />
ELSE ディレクティブは、 前 の 条 件 が 満 たされなかった 場 合 にアセンブルされ<br />
る 命 令 と デ ィ レ ク テ ィ ブのシーケン スの 開 始 位 置 をマー ク し ます。 | は ELSE と<br />
同 じ 意 味 です。<br />
ENDIF デ ィ レ ク テ ィ ブは、 条 件 付 き でアセンブル さ れる 命 令 と デ ィ レ ク テ ィ ブ<br />
のシーケン スの 終 了 位 置 をマー ク し ます。 ] は ENDIF と 同 じ 意 味 です。<br />
ELIF デ ィ レ ク テ ィ ブは、 条 件 をネ ス ト ま たは 反 復 する こ と な く 、 ELSE IF と 同<br />
じ 構 造 を 作 成 し ます。 詳 細 については、 「ELIF の 使 用 」 (ページ 7-43) を 参 照<br />
して 下 さい。<br />
構 文<br />
IF logical-expression<br />
…;code<br />
{ELSE<br />
…;code}<br />
ENDIF<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
logical-expression<br />
{TRUE} または {FALSE} を 求 める 式 を 指 定 し ます。<br />
詳 細 については、 「 関 係 演 算 子 」 (ページ 3-47) を 参 照 して 下 さい。<br />
使 用 法<br />
指 定 さ れた 条 件 下 においてのみアセンブルや 実 行 さ れる 命 令 と デ ィ レ ク テ ィ<br />
ブのシーケンスには、IF と ENDIF に 加 え、 必 要 に 応 じ て ELSE を 組 み 合 わせて 使<br />
用 します。<br />
IF...ENDIF 条 件 はネ ス ト で き ます (「ネステ ィ ングデ ィ レ ク テ ィ ブ」 (ページ<br />
7-36) を 参 照 )。<br />
7-42 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
ELIF の 使 用<br />
ELIF を 使 用 せずに、 以 下 の よ う なネ ス ト さ れた 条 件 付 き 命 令 セ ッ ト を 作 成 で<br />
きます。<br />
IF logical-expression<br />
instructions<br />
ELSE<br />
IF logical-expression2<br />
instructions<br />
ELSE<br />
IF logical-expression3<br />
instructions<br />
ENDIF<br />
ENDIF<br />
ENDIF<br />
このよ うなネス ト 構 造 は、 256 の 深 さ までネス ト でき ます。<br />
ELIF を 使 用 する と 、 同 じ 構 造 を よ り 簡 単 に 記 述 で き ます。<br />
IF logical-expression<br />
instructions<br />
ELIF logical-expression2<br />
instructions<br />
ELIF logical-expression3<br />
instructions<br />
ENDIF<br />
こ の 構 造 では、 現 在 のネ ス ト の 深 さ に IF...ENDIF の 1 レベルだけが 追 加 された<br />
深 さになり ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-43<br />
Non-Confidential
ディレクティブリファレンス<br />
例<br />
例 7-3 では、 NEWVERSION が 定 義 さ れてい る 場 合 は 最 初 の 命 令 群 がアセンブル さ<br />
れ、 定 義 されていない 場 合 は 2 番 目 の 命 令 群 がアセンブル さ れます。<br />
例 7-3 定 義 される 変 数 に 基 づ く 条 件 付 き アセンブ リ<br />
IF :DEF:NEWVERSION<br />
; first set of instructions or directives<br />
ELSE<br />
; alternative set of instructions or directives<br />
ENDIF<br />
armasm を 以 下 のよ う に 呼 び 出 した 場 合 には NEWVERSION が 定 義 される ため、 最 初<br />
の 命 令 群 と デ ィ レ ク テ ィ ブ 群 がアセンブル さ れます。<br />
armasm --predefine "NEWVERSION SETL {TRUE}" test.s<br />
armasm を 以 下 のよ う に 呼 び 出 した 場 合 には NEWVERSION が 定 義 されていないた<br />
め、 2 番 目 の 命 令 群 と デ ィ レ ク テ ィ ブ 群 がアセンブル さ れます。<br />
armasm test.s<br />
例 7-4 では、 NEWVERSION の 値 が {TRUE} の 場 合 に 最 初 の 命 令 群 がアセンブル さ<br />
れ、 それ 以 外 の 場 合 は 2 番 目 の 命 令 群 がアセンブル さ れます。<br />
例 7-4 変 数 の 値 に 基 づ く 条 件 付 き アセンブ リ<br />
IF NEWVERSION = {TRUE}<br />
; first set of instructions or directives<br />
ELSE<br />
; alternative set of instructions or directives<br />
ENDIF<br />
armasm を 以 下 の よ う に 呼 び 出 し た 場 合 には、 最 初 の 命 令 群 と デ ィ レ ク テ ィ ブ<br />
群 がアセンブルされます。<br />
armasm --predefine "NEWVERSION SETL {TRUE}" test.s<br />
armasm を 以 下 の よ う に 呼 び 出 し た 場 合 には、 2 番 目 の 命 令 群 と デ ィ レ ク テ ィ ブ<br />
群 がアセンブルされます。<br />
armasm --predefine "NEWVERSION SETL {FALSE}" test.s<br />
7-44 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.4.5 WHILE、 WEND<br />
WHILE ディレクティブは、 繰 り 返 しアセンブルされる 命 令 やディレクティブの<br />
シーケン ス を 開 始 し ます。 このシーケンスは WEND ディレクティブで 終 了 しま<br />
す。<br />
構 文<br />
WHILE logical-expression<br />
code<br />
WEND<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
logical-expression<br />
{TRUE} または {FALSE} を 求 める 式 を 指 定 します (「 論 理 式 」 (ペー<br />
ジ 3-39) を 参 照 )。<br />
使 用 法<br />
命 令 のシーケン ス を 複 数 回 アセンブルするには、 WHILE ディレクティブを WEND<br />
デ ィ レ ク テ ィ ブ と 組 み 合 わせて 使 用 し ます。 反 復 回 数 はゼ ロ にする こ と も で<br />
きます。<br />
IF...ENDIF 条 件 は WHILE...WEND ループ 内 で 使 用 でき ます。<br />
WHILE...WEND ループはネス ト でき ます (「ネステ ィ ングデ ィ レ ク テ ィ ブ」 (ペー<br />
ジ 7-36) を 参 照 )。<br />
例<br />
count SETA 1 ; you are not restricted to<br />
WHILE count
ディレクティブリファレンス<br />
7.5 Frame ディレクティブ<br />
こ のセ ク シ ョ ンでは、 以 下 のデ ィ レ ク テ ィ ブについて 説 明 し ます。<br />
• 「FRAME ADDRESS」 (ページ 7-48)<br />
• 「FRAME POP」 (ページ 7-50)<br />
• 「FRAME PUSH」 (ページ 7-52)<br />
• 「FRAME REGISTER」 (ページ 7-55)<br />
• 「FRAME RESTORE」 (ページ 7-56)<br />
• 「FRAME RETURN ADDRESS」 (ページ 7-57)<br />
• 「FRAME SAVE」 (ページ 7-58)<br />
• 「FRAME STATE REMEMBER」 (ページ 7-59)<br />
• 「FRAME STATE RESTORE」 (ページ 7-60)<br />
• 「FRAME UNWIND ON」 (ページ 7-61)<br />
• 「FRAME UNWIND OFF」 (ページ 7-61)<br />
• 「FUNCTION、 PROC」 (ページ 7-62)<br />
• 「ENDFUNC、 ENDP」 (ページ 7-64)<br />
上 記 のデ ィ レ ク テ ィ ブを 使 用 する こ と に よ り 、 以 下 の 処 理 を 行 う こ と がで き<br />
ます。<br />
• armlink --callgraph オプシ ョ ン を 使 用 し て、 アセンブ ラ 関 数 に よ る ス タ ッ<br />
ク 使 用 量 を 計 算 で き ます。<br />
ス タ ッ ク 使 用 量 の 特 定 には、 以 下 のルールが 使 用 されます。<br />
— 関 数 が PROC または ENDP でマー ク さ れていない 場 合 、 ス タ ッ ク 使 用<br />
量 は 特 定 でき ません。<br />
— 関 数 が PROC または ENDP でマーク されていても FRAME PUSH または<br />
FRAME POP でマー ク さ れていない 場 合 、 ス タ ッ ク 使 用 量 はゼ ロ であ<br />
ると 見 なされます。 つま り、 FRAME PUSH 0 または FRAME POP 0 を 手 動<br />
で 追 加 する 必 要 はあ り ません。<br />
— 関 数 が PROC または ENDP でマーク され、 かつ FRAME PUSH n または<br />
FRAME POP n でマーク されている 場 合 、 ス タ ッ ク 使 用 量 は n バイ ト と<br />
見 なされます。<br />
• 特 に 既 存 のコー ド を 変 更 する 場 合 に、 関 数 の 構 造 内 でのエ ラーを 回 避 で<br />
きます。<br />
• アセンブ ラ が 関 数 の 構 造 内 のエ ラーについて 警 告 メ ッ セージを 生 成 で き<br />
ます。<br />
7-46 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
• デバ ッ グ 時 に 関 数 呼 び 出 し のバ ッ ク ト レース を 行 う こ と がで き ます。<br />
• デバ ッ ガを 使 用 し て、 アセンブ ラ 関 数 のプ ロ フ ァ イルを 取 得 する こ と が<br />
できます。<br />
アセンブラ 関 数 のプロ フ ァ イルを 必 要 と し ていて も、 他 の 目 的 にフ レーム 記<br />
述 デ ィ レ ク テ ィ ブを 必 要 と し ない 場 合 、 以 下 の よ う にな り ます。<br />
• FUNCTION ディレクティブと ENDFUNC ディレクティブ、または PROC ディレク<br />
ティブと ENDP デ ィ レ ク テ ィ ブを 使 用 する 必 要 があ り ます。<br />
• 他 の FRAME ディレクティブは 省 略 できます。<br />
• FUNCTION ディレクティブと ENDFUNC ディレクティブは、 プロファイルの 取<br />
得 の 対 象 と な る 関 数 に 対 し てのみ 使 用 する 必 要 があ り ます。<br />
DWARF での 標 準 構 造 フ レームア ド レ スは、 割 り 込 み 関 数 のコールフ レーム<br />
がある 場 所 を 指 定 する、 スタ ッ ク 上 のアド レスです。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-47<br />
Non-Confidential
ディレクティブリファレンス<br />
7.5.1 FRAME ADDRESS<br />
FRAME ADDRESS ディレクティブは、 後 続 の 命 令 の 標 準 構 造 フレームアドレスの<br />
計 算 方 法 を 記 述 し ます。 このディレクティブは、FUNCTION ディレクティブと<br />
ENDFUNC デ ィ レ ク テ ィ ブを 含 む 関 数 ま たは PROC ディレクティブと ENDP ディレク<br />
テ ィ ブを 含 む 関 数 でのみ 使 用 で き ます。<br />
構 文<br />
FRAME ADDRESS reg[,offset]<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
reg<br />
offset<br />
標 準 構 造 フ レームア ド レ スのベース と な る レ ジ ス タ を 指 定 し ま<br />
す。 関 数 で 別 のフ レームポ イ ン タ を 使 用 し ない 限 り 、 こ のレ ジ ス<br />
タが sp にな り ます。<br />
reg か ら 標 準 構 造 フ レームア ド レ ス までのオフセ ッ ト を 指 定 し ま<br />
す。 offset がゼロの 場 合 は 省 略 でき ます。<br />
使 用 法<br />
FRAME ADDRESS デ ィ レ ク テ ィ ブは、 コー ド に よ って 標 準 構 造 フ レームア ド レ ス<br />
のベース と な る レ ジ ス タ が 変 更 さ れる 場 合 ま たはレ ジ ス タ か ら 標 準 構 造 フ<br />
レーム ア ド レ ス までのオフセ ッ ト が 変 更 さ れる 場 合 に 使 用 し ます。 FRAME<br />
ADDRESS デ ィ レ ク テ ィ ブは、 標 準 構 造 フ レームア ド レ スの 計 算 方 法 を 変 更 する<br />
命 令 の 直 後 に 使 用 する 必 要 があ り ます。<br />
注<br />
コードでレジスタを 保 存 してスタ ッ クポインタを 変 更 する 1 つの 命 令 を 使 用<br />
する 場 合 、 FRAME ADDRESS と FRAME SAVE の 両 方 を 使 用 する 代 わ り に FRAME PUSH を<br />
使 用 で き ます (「FRAME PUSH」 (ページ 7-52) を 参 照 )。<br />
また、 コードでレジスタをロードしてスタックポインタを 変 更 する 1 つの 命<br />
令 を 使 用 する 場 合 は、FRAME ADDRESS と FRAME RESTORE の 両 方 を 使 用 する 代 わ り に<br />
FRAME POP を 使 用 できます (「FRAME POP」 (ページ 7-50) を 参 照 )。<br />
例<br />
_fn FUNCTION ; CFA (Canonical Frame Address) is value<br />
; of sp on entry to function<br />
PUSH {r4,fp,ip,lr,pc}<br />
FRAME PUSH {r4,fp,ip,lr,pc}<br />
7-48 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
SUB sp,sp,#4 ; CFA offset now changed<br />
FRAME ADDRESS sp,24<br />
; - so we correct it<br />
ADD fp,sp,#20<br />
FRAME ADDRESS fp,4<br />
; New base register<br />
; code using fp to base call-frame on, instead of sp<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-49<br />
Non-Confidential
ディレクティブリファレンス<br />
7.5.2 FRAME POP<br />
FRAME POP デ ィ レ ク テ ィ ブを 使 用 し て、 呼 び 出 さ れる 側 がレ ジ ス タ を リ ロー ド<br />
するタイ ミ ングをアセンブラに 通 知 します。 このディレクティブは、FUNCTION<br />
ディレクティブと ENDFUNC デ ィ レ ク テ ィ ブを 含 む 関 数 ま たは PROC ディレクティ<br />
ブと ENDP デ ィ レ ク テ ィ ブを 含 む 関 数 でのみ 使 用 で き ます。<br />
こ のデ ィ レ ク テ ィ ブは、 関 数 内 の 最 後 の 命 令 の 後 で 必 ず 使 用 する 必 要 があ る<br />
ものではありません。<br />
構 文<br />
FRAME POP には 以 下 の 3 つの 構 文 があ り ます。<br />
FRAME POP {reglist}<br />
FRAME POP {reglist},n<br />
FRAME POP n<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
reglist<br />
n<br />
関 数 へのエン ト リ で 保 持 し ていた 値 に 復 元 さ れる レ ジ ス タ リ ス<br />
トを 指 定 します。 リストには 少 なくとも 1 本 のレ ジ ス タ を 指 定 す<br />
る 必 要 があ り ます。<br />
スタ ッ クポインタが 移 動 するバイ ト 数 を 指 定 します。<br />
使 用 法<br />
FRAME POP は、FRAME ADDRESS ディレクティブおよび FRAME RESTORE ディレクティブ<br />
を 使 用 する こ と と 同 じ です。 このディレクティブを 使 用 すると、 1 つの 命 令 で<br />
レジスタをロードし、 スタックポインタを 変 更 することができます。<br />
FRAME POP は、 こ のデ ィ レ ク テ ィ ブが 参 照 する 命 令 の 直 後 に 配 置 する 必 要 があ<br />
ります。<br />
n が 指 定 されていないかゼロの 場 合 、 アセンブラによ って、 {reglist} から 標 準<br />
構 造 フ レームア ド レ ス までの 新 し いオフセ ッ ト が 計 算 さ れます。 アセンブラ<br />
は 以 下 を 前 提 と し ています。<br />
• ポップされる 各 <strong>ARM</strong> レジスタによってスタック 上 の 4 バイ トが 占 有 さ<br />
れています。<br />
• ポップされる 各 VFP 単 精 度 レジスタによってスタック 上 の 4 バイ トが 占<br />
有 され、 さらにリ ス ト ごとに 4 バイ ト ワードが 占 有 されています。<br />
7-50 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
• ポップされる 各 VFP 倍 精 度 レジスタによってスタック 上 の 8 バイ トが 占<br />
有 され、 さらにリ ス ト ごとに 4 バイ ト ワードが 占 有 されています。<br />
「FRAME ADDRESS」 (ページ 7-48) および 「FRAME RESTORE」 (ページ<br />
7-56) を 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-51<br />
Non-Confidential
ディレクティブリファレンス<br />
7.5.3 FRAME PUSH<br />
FRAME PUSH ディレクティブを 使 用 して、 通 常 は 関 数 エントリにおいて、 呼 び 出<br />
さ れる 側 がレ ジ ス タ を 保 存 する タ イ ミ ングをアセンブ ラ に 通 知 し ます。 この<br />
ディレクティブは、FUNCTION ディレクティブと ENDFUNC ディレクティブを 含 む<br />
関 数 ま たは PROC ディレクティブと ENDP デ ィ レ ク テ ィ ブを 含 む 関 数 でのみ 使 用<br />
できます。<br />
構 文<br />
FRAME PUSH には 以 下 の 2 つの 構 文 があ り ます。<br />
FRAME PUSH {reglist}<br />
FRAME PUSH {reglist},n<br />
FRAME PUSH n<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
reglist<br />
n<br />
標 準 構 造 フ レームア ド レ スの 下 位 方 向 に 連 続 し て ス ト ア さ れる<br />
レジスタのリ ス ト を 指 定 します。 リストには 少 なくとも 1 本 のレ<br />
ジ ス タ を 指 定 する 必 要 があ り ます。<br />
スタ ッ クポインタが 移 動 するバイ ト 数 を 指 定 します。<br />
使 用 法<br />
FRAME PUSH は、 FRAME ADDRESS ディレクティブおよび FRAME SAVE ディレクティブ<br />
を 使 用 する こ と と 同 じ です。 このディレクティブを 使 用 すると、 1 つの 命 令 で<br />
レジスタを 保 存 し、 スタッ クポインタを 変 更 するこ とができます。<br />
FRAME PUSH は、 こ のデ ィ レ ク テ ィ ブが 参 照 する 命 令 の 直 後 に 配 置 する 必 要 があ<br />
ります。<br />
n が 指 定 されていないかゼロの 場 合 、 アセンブラによ って、 {reglist} から 標 準<br />
構 造 フ レームア ド レ ス までの 新 し いオフセ ッ ト が 計 算 さ れます。 アセンブラ<br />
は 以 下 を 前 提 と し ています。<br />
• プッシュされる 各 <strong>ARM</strong> レジスタによってスタック 上 の 4 バイ トが 占 有<br />
されています。<br />
• プッシュされる 各 VFP 単 精 度 レジスタによってスタック 上 の 4 バイ トが<br />
占 有 さ れ、 さ ら に リ ス ト ご と に 4 バイ ト ワードが 占 有 されています。<br />
7-52 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
• ポップされる 各 VFP 倍 精 度 レジスタによってスタック 上 の 8 バイ トが 占<br />
有 され、 さらにリ ス ト ごとに 4 バイ ト ワードが 占 有 されています。<br />
「FRAME ADDRESS」 (ページ 7-48) および「FRAME SAVE」 (ページ 7-58) を<br />
参 照 し て 下 さ い。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-53<br />
Non-Confidential
ディレクティブリファレンス<br />
例<br />
p PROC ; Canonical frame address is sp + 0<br />
EXPORT p<br />
PUSH {r4-r6,lr}<br />
; sp has moved relative to the canonical frame address,<br />
; and registers r4, r5, r6 and lr are now on the stack<br />
FRAME PUSH {r4-r6,lr}<br />
; Equivalent to:<br />
; FRAME ADDRESS sp,16 ; 16 bytes in {r4-r6,lr}<br />
; FRAME SAVE {r4-r6,lr},-16<br />
7-54 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.5.4 FRAME REGISTER<br />
FRAME REGISTER デ ィ レ ク テ ィ ブを 使 用 し て、 レ ジ ス タ に 保 持 さ れてい る 関 数 引<br />
数 の 位 置 を 管 理 します。 このディレクティブは、FUNCTION ディレクティブと<br />
ENDFUNC デ ィ レ ク テ ィ ブを 含 む 関 数 ま たは PROC ディレクティブと ENDP ディレク<br />
テ ィ ブを 含 む 関 数 でのみ 使 用 で き ます。<br />
構 文<br />
FRAME REGISTER reg1,reg2<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
reg1<br />
reg2<br />
関 数 へのエン ト リ で 引 数 を 保 持 する レ ジ ス タ を 指 定 し ます。<br />
その 値 を 保 持 する レジス タを 指 定 し ます。<br />
使 用 法<br />
FRAME REGISTER ディレクティブは、 関 数 へのエント リで 別 のレジスタに 保 持 さ<br />
れていた 引 数 を 保 持 する レ ジ ス タ を 使 用 する 場 合 に 使 用 し ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-55<br />
Non-Confidential
ディレクティブリファレンス<br />
7.5.5 FRAME RESTORE<br />
FRAME RESTORE ディレクティブを 使 用 して、 指 定 されたレジスタの 内 容 が、 関<br />
数 へのエン ト リ で 保 持 さ れていた 値 に 復 元 さ れた こ と を アセンブ ラ に 通 知 し<br />
ます。 このディレクティブは、FUNCTION ディレクティブと ENDFUNC ディレク<br />
テ ィ ブを 含 む 関 数 ま たは PROC ディレクティブと ENDP デ ィ レ ク テ ィ ブを 含 む 関<br />
数 でのみ 使 用 でき ます。<br />
構 文<br />
FRAME RESTORE {reglist}<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
reglist<br />
内 容 が 復 元 さ れた レ ジ ス タ の リ ス ト を 指 定 し ます。 リストには 少<br />
なくとも 1 つのレジス タ を 指 定 する 必 要 があ り ます。<br />
使 用 法<br />
FRAME RESTORE は、 呼 び 出 さ れる 側 がス タ ッ ク か ら レ ジ ス タ を リ ロー ド し た 直<br />
後 に 使 用 し ます。 こ のデ ィ レ ク テ ィ ブは、 関 数 内 の 最 後 の 命 令 の 後 で 必 ず 使<br />
用 する 必 要 があ る も のではあ り ません。<br />
reglist には、 整 数 レ ジ ス タ ま たは 浮 動 小 数 点 レ ジ ス タ のいずれかを 指 定 で き<br />
ますが、 両 方 を 混 在 させる こ とはできません。<br />
注<br />
また、 コードでレジスタをロードしてスタックポインタを 変 更 する 1 つの 命<br />
令 を 使 用 する 場 合 は、FRAME RESTORE と FRAME ADDRESS の 両 方 を 使 用 する 代 わ り に<br />
FRAME POP を 使 用 できます (「FRAME POP」 (ページ 7-50) を 参 照 )。<br />
7-56 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.5.6 FRAME RETURN ADDRESS<br />
FRAME RETURN ADDRESS ディレクティブによって、 r14 以 外 のレ ジ ス タ を 復 帰 ア ド<br />
レ スに 使 用 する 関 数 を 定 義 で き ます。 このディレクティブは、FUNCTION ディレ<br />
クティブと ENDFUNC デ ィ レ ク テ ィ ブを 含 む 関 数 ま たは PROC ディレクティブと<br />
ENDP デ ィ レ ク テ ィ ブを 含 む 関 数 でのみ 使 用 で き ます。<br />
注<br />
r14 以 外 のレ ジ ス タ を 復 帰 ア ド レ スに 使 用 する 関 数 は AAPCS に 準 拠 し ていま<br />
せん。 このよ うな 関 数 はエクスポート しないで 下 さい。<br />
構 文<br />
FRAME RETURN ADDRESS reg<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
reg<br />
復 帰 ア ド レ スに 使 用 する レ ジ ス タ を 指 定 し ます。<br />
使 用 法<br />
FRAME RETURN ADDRESS ディレクティブは、 復 帰 アドレスに r14 を 使 用 しない 関 数<br />
で 使 用 し ます。 こ のデ ィ レ ク テ ィ ブを 使 用 し ない と 、 デバ ッ ガはその 関 数 の<br />
バック ト レースを 行 う こ とができません。<br />
FRAME RETURN ADDRESS は、 r14 を 使 用 し ない 関 数 の 開 始 位 置 をマー ク する<br />
FUNCTION ディレクティブまたは PROC ディレクティブの 直 後 に 使 用 します。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-57<br />
Non-Confidential
ディレクティブリファレンス<br />
7.5.7 FRAME SAVE<br />
FRAME SAVE デ ィ レ ク テ ィ ブは、 標 準 構 造 フ レームア ド レ スか ら の 相 対 位 置 に 保<br />
存 されるレジスタの 位 置 を 記 述 します。 このディレクティブは、FUNCTION ディ<br />
レクティブと ENDFUNC デ ィ レ ク テ ィ ブを 含 む 関 数 ま たは PROC ディレクティブと<br />
ENDP デ ィ レ ク テ ィ ブを 含 む 関 数 でのみ 使 用 で き ます。<br />
構 文<br />
FRAME SAVE {reglist}, offset<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
reglist<br />
標 準 構 造 フ レームア ド レ スか ら の offset から 連 続 してス トアさ<br />
れるレジスタのリ ス ト を 指 定 します。 リストには 少 なくとも 1 つ<br />
のレ ジ ス タ を 指 定 する 必 要 があ り ます。<br />
使 用 法<br />
FRAME SAVE は、 呼 び 出 さ れる 側 がス タ ッ ク にレ ジ ス タ を ス ト ア し た 直 後 に 使 用<br />
します。<br />
reglist には、 バッ ク ト レースに 不 要 なレジス タ を 含 める こ と ができ ます。<br />
DWARF コールフレーム 情 報 と して 記 録 する 必 要 のあるレジスタはアセンブ<br />
ラによって 決 定 されます。<br />
注<br />
コードでレジスタを 保 存 してスタ ッ クポインタを 変 更 する 1 つの 命 令 を 使 用<br />
する 場 合 、 FRAME SAVE と FRAME ADDRESS の 両 方 を 使 用 する 代 わ り に FRAME PUSH を<br />
使 用 で き ます (「FRAME PUSH」 (ページ 7-52) を 参 照 )。<br />
7-58 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.5.8 FRAME STATE REMEMBER<br />
FRAME STATE REMEMBER デ ィ レ ク テ ィ ブは、 標 準 構 造 フ レームア ド レ ス と 、 保 存<br />
さ れる レ ジ ス タ 値 の 位 置 の 計 算 方 法 に 関 する 現 在 の 情 報 を 保 存 し ます。 この<br />
ディレクティブは、FUNCTION ディレクティブと ENDFUNC ディレクティブを 含 む<br />
関 数 ま たは PROC ディレクティブと ENDP デ ィ レ ク テ ィ ブを 含 む 関 数 でのみ 使 用<br />
できます。<br />
構 文<br />
FRAME STATE REMEMBER<br />
使 用 法<br />
イ ン ラ イ ンの 終 了 シーケン スでは、 標 準 構 造 フ レームア ド レ ス と 、 保 存 さ れ<br />
る レジス タ 値 の 位 置 の 計 算 に 関 する 情 報 が 変 更 される 場 合 があ り ます。 終 了<br />
シーケン スの 後 、 以 前 と 同 じ 情 報 を 使 用 し て 別 の 分 岐 を 継 続 で き ます。 この<br />
情 報 を 保 存 するには FRAME STATE REMEMBER を 使 用 し、 この 情 報 を 復 元 するには<br />
FRAME STATE RESTORE を 使 用 し ます。<br />
これらのディレクティブはネス トできます。 各 FRAME STATE RESTORE ディレク<br />
テ ィ ブには、 対 応 する FRAME STATE REMEMBER デ ィ レ ク テ ィ ブが 必 要 です。 詳 細 に<br />
ついては、 以 下 を 参 照 して 下 さい。<br />
• 「FRAME STATE RESTORE」 (ページ 7-60)<br />
• 「FUNCTION、 PROC」 (ページ 7-62)<br />
例<br />
exitB<br />
; function code<br />
FRAME STATE REMEMBER<br />
; save frame state before in-line exit sequence<br />
POP {r4-r6,pc}<br />
; do not have to FRAME POP here, as control has<br />
; transferred out of the function<br />
FRAME STATE RESTORE<br />
; end of exit sequence, so restore state<br />
; code for exitB<br />
POP {r4-r6,pc}<br />
ENDP<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-59<br />
Non-Confidential
ディレクティブリファレンス<br />
7.5.9 FRAME STATE RESTORE<br />
FRAME STATE RESTORE デ ィ レ ク テ ィ ブは、 標 準 構 造 フ レームア ド レ ス と 、 保 存 さ<br />
れる レジス タ 値 の 位 置 の 計 算 方 法 に 関 する 現 在 の 情 報 を 復 元 し ます。 この<br />
ディレクティブは、FUNCTION ディレクティブと ENDFUNC ディレクティブを 含 む<br />
関 数 ま たは PROC ディレクティブと ENDP デ ィ レ ク テ ィ ブを 含 む 関 数 でのみ 使 用<br />
できます。<br />
構 文<br />
FRAME STATE RESTORE<br />
使 用 法<br />
参 照 先 :<br />
• 「FRAME STATE REMEMBER」 (ページ 7-59)<br />
• 「FUNCTION、 PROC」 (ページ 7-62)<br />
7-60 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.5.10 FRAME UNWIND ON<br />
FRAME UNWIND ON デ ィ レ ク テ ィ ブは、 こ の 関 数 と 後 に 続 く 関 数 の unwind テーブ<br />
ルを 生 成 する よ う アセンブ ラ に 指 示 し ます。<br />
構 文<br />
FRAME UNWIND ON<br />
使 用 法<br />
こ のデ ィ レ ク テ ィ ブは 関 数 の 外 部 で 使 用 で き ます。 この 場 合 のアセンブラは、<br />
FRAME UNWIND OFF デ ィ レ ク テ ィ ブに 到 達 する まで、 後 続 のすべての 関 数 の<br />
unwind テーブルを 生 成 し ます。<br />
注<br />
FRAME UNWIND デ ィ レ ク テ ィ ブは、 例 外 テーブル 生 成 を 有 効 にするには 不 十 分 で<br />
す。 さらに、FRAME UNWIND ディレクティブに 他 の FRAME ディレクティブがない 場<br />
合 、 情 報 が 不 十 分 なので、 アセンブ ラ は unwind 情 報 を 生 成 で き ません。<br />
「 例 外 テーブル 生 成 を 制 御 する」 (ページ 3-21) も 参 照 して 下 さい。<br />
7.5.11 FRAME UNWIND OFF<br />
FRAME UNWIND OFF デ ィ レ ク テ ィ ブは、 こ の 関 数 と 後 に 続 く 関 数 の nounwind テー<br />
ブルを 生 成 する よ う アセンブ ラ に 指 示 し ます。<br />
構 文<br />
FRAME UNWIND OFF<br />
使 用 法<br />
こ のデ ィ レ ク テ ィ ブは 関 数 の 外 部 で 使 用 で き ます。 この 場 合 のアセンブラは、<br />
FRAME UNWIND ON デ ィ レ ク テ ィ ブに 到 達 する まで、 後 続 のすべての 関 数 の<br />
nounwind テーブルを 生 成 し ます。<br />
「 例 外 テーブル 生 成 を 制 御 する」 (ページ 3-21) も 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-61<br />
Non-Confidential
ディレクティブリファレンス<br />
7.5.12 FUNCTION、 PROC<br />
FUNCTION デ ィ レ ク テ ィ ブは、 関 数 の 開 始 位 置 をマー ク し ます。 PROC は FUNCTION<br />
と 同 じ 意 味 です。<br />
構 文<br />
label FUNCTION [{reglist1} [, {reglist2}]]<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
reglist1<br />
reglist2<br />
呼 び 出 される 側 によって 保 存 される <strong>ARM</strong> レジスタのリ ス ト を 指<br />
定 で き ます ( 省 略 可 )。 reglist1 が 指 定 さ れていない 場 合 、 デバ ッ<br />
ガはレ ジ ス タ の 使 用 状 況 をチェ ッ クする と きに AAPCS が 使 用 さ<br />
れている と 見 なし ます。<br />
呼 び 出 される 側 によって 保 存 される VFP レジスタのリ ス ト を 指<br />
定 で き ます ( 省 略 可 )。<br />
使 用 法<br />
FUNCTION デ ィ レ ク テ ィ ブを 使 用 し て 関 数 の 開 始 位 置 をマー ク し ます。 ELF の<br />
DWARF コールフレーム 情 報 を 生 成 する と き、 アセンブラは FUNCTION を 使 用 し<br />
て 関 数 の 開 始 位 置 を 識 別 し ます。<br />
FUNCTION に よ って 標 準 構 造 フ レームア ド レ スは r13 (sp) に 設 定 され、 フレー<br />
ムのスタ ッ クは 空 にな り ます。<br />
各 FUNCTION ディレクティブには、 対 応 する ENDFUNC ディレクティブが 必 要 で<br />
す。 FUNCTION と ENDFUNC の 対 をネス ト し た り 、 これらの 対 に PROC ディレクティ<br />
ブや ENDP ディレクティブを 含 めたりすることはできません。<br />
別 のプ ロ シージ ャ コール 標 準 を 使 用 し てい る 場 合 は、 オプシ ョ ンの reglist パ<br />
ラ メータを 使 用 して、 その 情 報 をデバッガに 通 知 できます。 ただし、 すべて<br />
のデバッ ガがこ の 機 能 をサポー ト し ているわけではあ り ません。 詳 細 につい<br />
ては、 デバッガのマニュアルを 参 照 して 下 さい。<br />
また、 「FRAME ADDRESS」 (ページ 7-48) ~「FRAME STATE RESTORE」<br />
(ページ 7-60) も 参 照 して 下 さい。<br />
7-62 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
注<br />
FUNCTION では、 ワー ド 境 界 (Thumb の 場 合 はハーフ ワー ド 境 界 ) への 境 界 調<br />
整 は 自 動 的 には 行 われません。 境 界 調 整 を 行 う 必 要 があ る 場 合 は ALIGN を 使 用<br />
し ます。 こ のデ ィ レ ク テ ィ ブを 使 用 し ない と 、 コールフ レームに よ って 関 数<br />
の 開 始 位 置 が 示 さ れない 場 合 があ り ます。 詳 細 については、 「ALIGN」 (ペー<br />
ジ 7-78) を 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-63<br />
Non-Confidential
ディレクティブリファレンス<br />
例<br />
ALIGN ; ensures alignment<br />
dadd FUNCTION ; without the ALIGN directive, this might not be word-aligned<br />
EXPORT dadd<br />
PUSH {r4-r6,lr} ; this line automatically word-aligned<br />
FRAME PUSH {r4-r6,lr}<br />
; subroutine body<br />
POP {r4-r6,pc}<br />
ENDFUNC<br />
func6 PROC {r4-r8,r12},{D1-D3} ; non-AAPCS-conforming function<br />
...<br />
ENDP<br />
7.5.13 ENDFUNC、 ENDP<br />
ENDFUNC ディレクティブは、 AAPCS 準 拠 の 関 数 の 終 了 位 置 をマー ク し ます<br />
(「FUNCTION、 PROC」 (ページ 7-62) を 参 照 )。 ENDP は ENDFUNC と 同 じ 意 味 で<br />
す。<br />
7-64 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.6 通 知 デ ィ レ ク テ ィ ブ<br />
7.6.1 ASSERT<br />
こ のセ ク シ ョ ンでは、 以 下 のデ ィ レ ク テ ィ ブについて 説 明 し ます。<br />
• 「ASSERT」<br />
アセンブ リ 時 にアサーシ ョ ンが 偽 にな る 場 合 にエ ラー メ ッ セージ を 生 成<br />
します。<br />
• 「INFO」 (ページ 7-67)<br />
アセンブ リ 時 に 診 断 情 報 を 生 成 し ます。<br />
• 「OPT」 (ページ 7-68)<br />
リストオプションを 設 定 します。<br />
• 「TTL、 SUBT」 (ページ 7-71)<br />
リ ス ト に タ イ ト ル と サブ タ イ ト ルを 挿 入 し ます。<br />
ASSERT ディレクティブは、 指 定 されたアサーションが 偽 になると、 アセンブ<br />
リの 第 2 パスでエラーメ ッセージを 生 成 します。<br />
構 文<br />
ASSERT logical-expression<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
logical-expression<br />
{TRUE} または {FALSE} を 返 すアサーシ ョ ンを 指 定 し ます。<br />
使 用 法<br />
ASSERT を 使 用 して、 必 要 な 条 件 がアセンブ リ 時 に 満 たされているかど う かを<br />
確 認 し ます。<br />
アサーシ ョ ンが 偽 の 場 合 、 エラー メ ッ セージが 生 成 され、 アセンブルに 失 敗<br />
します。<br />
「INFO」 (ページ 7-67) も 参 照 して 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-65<br />
Non-Confidential
ディレクティブリファレンス<br />
例<br />
ASSERT label1
ディレクティブリファレンス<br />
7.6.2 INFO<br />
INFO デ ィ レ ク テ ィ ブは、 アセンブルのど ち ら のパスに 関 する 診 断 情 報 の 生 成<br />
もサポート します。<br />
! INFO と よ く 似 ていますが、 通 知 さ れる 情 報 の 詳 細 度 は 低 く な り ます。<br />
構 文<br />
INFO numeric-expression, string-expression<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
numeric-expression<br />
アセンブ リ 時 に 評 価 さ れる 数 値 式 を 指 定 し ます。 この 式 の 結 果 が<br />
ゼ ロ になった 場 合 、 以 下 の よ う にな り ます。<br />
• 第 1 パスでは 何 も 行 われません。<br />
• 第 2 パスでは string-expression が 出 力 されます。<br />
この 式 の 結 果 がゼロ 以 外 の 場 合 は、 string-expression がエラー<br />
メ ッ セージ と し て 出 力 さ れ、 アセンブルに 失 敗 し ます。<br />
string-expression<br />
文 字 列 を 返 す 式 を 指 定 します。<br />
使 用 法<br />
INFO デ ィ レ ク テ ィ ブを 使 用 する と 、 独 自 のエ ラー メ ッ セージを 柔 軟 に 作 成 す<br />
ることができます。 数 値 式 と 文 字 列 式 に 関 する 追 加 情 報 については、 「 数 値<br />
式 」 (ページ 3-36) および「 文 字 列 式 」 (ページ 3-35) を 参 照 して 下 さい。<br />
「ASSERT」 (ページ 7-65) も 参 照 して 下 さい。<br />
例<br />
INFO 0, "Version 1.0"<br />
IF endofdata
ディレクティブリファレンス<br />
7.6.3 OPT<br />
OPT ディレクティブは、 ソースコード 内 から リス トオプションを 設 定 します。<br />
構 文<br />
OPT n<br />
各 パ ラ メ ータには 以 下 の 意 味 があ り ます。<br />
n<br />
OPT ディレクティブの 設 定 を 指 定 します。 表 7-2 は、 利 用<br />
可 能 な 設 定 を 示 し ています。<br />
表 7-2 OPT デ ィ レ ク テ ィ ブの 設 定<br />
OPT n<br />
効 果<br />
1 通 常 の リ ス テ ィ ン グが 有 効 にな り ます。<br />
2 通 常 の リ ス テ ィ ン グが 無 効 にな り ます。<br />
4 ページ 区 切 り が 行 われます。 すぐに 改 ページが 行 われ、 新 し<br />
いページが 始 ま り ます。<br />
8 行 番 号 カ ウ ン タ がゼ ロ に リ セ ッ ト さ れます。<br />
16 SET、 GBL、 および LCL ディレクティブのリスティングが 有 効<br />
にな り ます。<br />
32 SET、 GBL、 および LCL ディレクティブのリスティングが 無 効<br />
にな り ます。<br />
64 マ ク ロ 拡 張 の リ ステ ィ ングが 有 効 にな り ます。<br />
128 マ ク ロ 拡 張 の リ ステ ィ ングが 無 効 にな り ます。<br />
256 マ ク ロ 呼 び 出 し の リ ス テ ィ ン グが 有 効 にな り ます。<br />
512 マ ク ロ 呼 び 出 し の リ ス テ ィ ン グが 無 効 にな り ます。<br />
1024 第 1 パスの リ ス テ ィ ン グが 有 効 にな り ます。<br />
2048 第 1 パスの リ ス テ ィ ン グが 無 効 にな り ます。<br />
4096 条 件 デ ィ レ ク テ ィ ブの リ ス テ ィ ン グが 有 効 にな り ます。<br />
7-68 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
表 7-2 OPT デ ィ レ ク テ ィ ブの 設 定 ( 続 き)<br />
OPT n<br />
効 果<br />
8192 条 件 デ ィ レ ク テ ィ ブの リ ス テ ィ ン グが 無 効 にな り ます。<br />
16384 MEND ディレクティブのリスティングが 有 効 になります。<br />
32768 MEND ディレクティブのリスティングが 無 効 になります。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-69<br />
Non-Confidential
ディレクティブリファレンス<br />
使 用 法<br />
リスティングを 有 効 にするには、--list= アセンブラオプシ ョ ンを 指 定 します。<br />
デフォル ト では、--list= オプシ ョ ン を 指 定 する と 、 変 数 宣 言 、 マ ク ロ 拡 張 、<br />
呼 び 出 し 条 件 デ ィ レ ク テ ィ ブ、 MEND デ ィ レ ク テ ィ ブを 含 む 通 常 の リ ス ト が 生<br />
成 されます。 このリ ス トは 第 2 パスのみで 生 成 されます。 コード 内 でデフォル<br />
トのリストオプションを 修 正 するには、OPT デ ィ レ ク テ ィ ブを 使 用 し ます。<br />
--list= オプシ ョ ンについては、 「リストをファイルに 出 力 する」 (ページ<br />
3-18) を 参 照 して 下 さい。<br />
OPT デ ィ レ ク テ ィ ブを 使 用 し て、 コー ド の リ ス ト のフ ォーマ ッ ト を 設 定 で き ま<br />
す。 例 えば、 関 数 と セ ク シ ョ ンの 前 に 新 し いページ を 指 定 で き ます。<br />
例<br />
start<br />
func1<br />
AREA<br />
; code<br />
; code<br />
BL<br />
; code<br />
OPT 4<br />
; code<br />
Example, CODE, READONLY<br />
func1<br />
; places a page break before func1<br />
7-70 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.6.4 TTL、 SUBT<br />
TTL デ ィ レ ク テ ィ ブは、 リ ス テ ィ ング フ ァ イルの 各 ページの 先 頭 に タ イ ト ルを<br />
挿 入 し ます。 このタイ トルは、 新 しい TTL ディレクティブが 発 行 されるまで 各<br />
ページに 出 力 さ れます。<br />
SUBT ディレクティブは、 リスティングファイルのページにサブタイ トルを 挿<br />
入 します。 このサブタイ トルは、 新 しい SUBT ディレクティブが 発 行 されるま<br />
で 各 ページに 出 力 さ れます。<br />
構 文<br />
TTL title<br />
SUBT subtitle<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
title<br />
subtitle<br />
タイトルを 指 定 します。<br />
サブタ イ ト ルを 指 定 し ます。<br />
使 用 法<br />
TTL デ ィ レ ク テ ィ ブを 使 用 し て、 リ ス テ ィ ング フ ァ イルの 各 ページの 最 上 部 に<br />
タイトルを 挿 入 します。 最 初 のページに タ イ ト ルを 出 力 する 場 合 は、 ソース<br />
ファイルの 1 行 目 に TTL デ ィ レ ク テ ィ ブを 配 置 する 必 要 があ り ます。<br />
タイトルを 変 更 するには、 別 の TTL デ ィ レ ク テ ィ ブを 使 用 し ます。 新 しい TTL<br />
デ ィ レ ク テ ィ ブの 設 定 内 容 は、 次 のページか ら 反 映 さ れます。<br />
SUBT デ ィ レ ク テ ィ ブを 使 用 し て、 リ ス テ ィ ング フ ァ イルのページの 最 上 部 に<br />
サブタ イ ト ルを 挿 入 し ます。 サブタイトルは、 タイトルの 次 の 行 に 出 力 され<br />
ます。 最 初 のページにサブ タ イ ト ルを 出 力 する 場 合 は、 ソース フ ァ イルの 1 行<br />
目 に SUBT デ ィ レ ク テ ィ ブを 配 置 する 必 要 があ り ます。<br />
サブ タ イ ト ルを 変 更 する には、 別 の SUBT ディレクティブを 使 用 します。 新 し<br />
い SUBT デ ィ レ ク テ ィ ブの 設 定 内 容 は、 次 のページか ら 反 映 さ れます。<br />
例<br />
TTL First Title ; places a title on the first<br />
; and subsequent pages of a<br />
; listing file.<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-71<br />
Non-Confidential
ディレクティブリファレンス<br />
SUBT<br />
First Subtitle ; places a subtitle on the<br />
; second and subsequent pages<br />
; of a listing file.<br />
7-72 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.7 命 令 セ ッ ト と 構 文 選 択 のデ ィ レ ク テ ィ ブ<br />
こ のセ ク シ ョ ンでは、 以 下 のデ ィ レ ク テ ィ ブについて 説 明 し ます。<br />
• 「<strong>ARM</strong>、 THUMB、 THUMBX、 CODE16、 CODE32」 (ページ 7-74)<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-73<br />
Non-Confidential
ディレクティブリファレンス<br />
7.7.1 <strong>ARM</strong>、 THUMB、 THUMBX、 CODE16、 CODE32<br />
<strong>ARM</strong> ディレクティブと CODE32 ディレクティブは 同 じ 意 味 です。 これらは、 UAL<br />
構 文 か Thumb-2 以 前 の <strong>ARM</strong> アセンブ ラ 言 語 構 文 のいずれかを 使 用 し て、 後<br />
に 続 く 命 令 を <strong>ARM</strong> 命 令 と し て 解 釈 する よ う アセンブ ラ に 指 示 し ます。<br />
THUMB ディレクティブは、 UAL 構 文 を 使 用 し て、 後 に 続 く 命 令 を Thumb 命 令<br />
と し て 命 令 を 解 釈 する よ う にアセンブ ラ に 指 示 し ます。<br />
THUMBX ディレクティブは、 UAL 構 文 を 使 用 して、 後 に 続 く 命 令 を Thumb-2EE<br />
命 令 と し て 解 釈 する よ う にアセンブ ラ に 指 示 し ます。<br />
CODE16 ディレクティブは、 UAL 以 前 のアセンブ リ 言 語 構 文 を 使 用 し て、 後 に<br />
続 く 命 令 を Thumb 命 令 と し て 解 釈 する よ う にアセンブ ラ に 指 示 し ます。<br />
これらのディレクティブはまた、 必 要 に 応 じて、 <strong>ARM</strong> に 関 し ては 最 大 3 バイ<br />
ト のパデ ィ ングを 挿 入 し て 次 のワード 境 界 で 整 列 させ、 Thumb または<br />
Thumb-2EE に 関 し ては 最 大 1 バイ ト のパデ ィ ングを 挿 入 し て 次 のハーフ ワー<br />
ド 境 界 で 整 列 させます。<br />
構 文<br />
<strong>ARM</strong><br />
THUMB<br />
THUMBX<br />
CODE16<br />
CODE32<br />
使 用 法<br />
異 なる 命 令 セッ ト を 使 用 したコード を 含 むフ ァ イルでは、 以 下 のよ う にな り<br />
ます。<br />
• <strong>ARM</strong> は <strong>ARM</strong> コー ド の 前 に 配 置 する 必 要 があ り ます。 CODE32 は <strong>ARM</strong> と 同 じ<br />
意 味 です。<br />
• THUMB は、 UAL 構 文 で 記 述 さ れた Thumb コー ド の 前 に 配 置 する 必 要 があ<br />
ります。<br />
• THUMBX は、 UAL 構 文 で 記 述 さ れた Thumb-2EE コードの 前 に 配 置 する 必<br />
要 があ り ます。<br />
• CODE16 は、 UAL 以 前 の 構 文 で 記 述 さ れた Thumb コードの 前 に 配 置 する<br />
必 要 があ り ます。<br />
7-74 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
これらのディレクティブをアセンブルしても、 命 令 は 生 成 されません。 また、<br />
状 態 が 変 更 さ れる わけで も あ り ません。 これらのディレクティブは、 <strong>ARM</strong>、<br />
Thumb、 または Thumb-2EE の 命 令 を 適 切 にアセンブルする よ う アセンブラに<br />
指 示 し、 必 要 に 応 じ てパデ ィ ングを 挿 入 する だけです。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-75<br />
Non-Confidential
ディレクティブリファレンス<br />
例<br />
この 例 では、<strong>ARM</strong> および THUMB を 使 用 して <strong>ARM</strong> 命 令 か ら Thumb 命 令 に 分 岐 す<br />
る 方 法 を 示 します。<br />
AREA ToThumb, CODE, READONLY ; Name this block of code<br />
ENTRY<br />
; Mark first instruction to execute<br />
<strong>ARM</strong><br />
; Subsequent instructions are <strong>ARM</strong><br />
start<br />
ADR r0, into_thumb + 1 ; Processor starts in <strong>ARM</strong> state<br />
BX r0 ; Inline switch to Thumb state<br />
THUMB<br />
; Subsequent instructions are Thumb<br />
into_thumb<br />
MOVS r0, #10 ; New-style Thumb instructions<br />
7-76 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.8 その 他 のデ ィ レ ク テ ィ ブ<br />
こ のセ ク シ ョ ンでは、 以 下 のデ ィ レ ク テ ィ ブについて 説 明 し ます。<br />
• 「ALIGN」 (ページ 7-78)<br />
• 「AREA」 (ページ 7-81)<br />
• 「ATTR」 (ページ 7-86)<br />
• 「END」 (ページ 7-88)<br />
• 「ENTRY」 (ページ 7-88)<br />
• 「EQU」 (ページ 7-90)<br />
• 「EXPORT、 GLOBAL」 (ページ 7-92)<br />
• 「EXPORTAS」 (ページ 7-94)<br />
• 「GET、 INCLUDE」 (ページ 7-95)<br />
• 「IMPORT、 EXTERN」 (ページ 7-97)<br />
• 「INCBIN」 (ページ 7-100)<br />
• 「KEEP」 (ページ 7-101)<br />
• 「NOFP」 (ページ 7-102)<br />
• 「REQUIRE」 (ページ 7-102)<br />
• 「REQUIRE8、 PRESERVE8」 (ページ 7-103)<br />
• 「ROUT」 (ページ 7-104)<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-77<br />
Non-Confidential
ディレクティブリファレンス<br />
7.8.1 ALIGN<br />
ALIGN ディレクティブは、 ゼロ、 または NOP 命 令 でパデ ィ ングする こ と に よ り 、<br />
現 在 の 位 置 を 指 定 さ れた 境 界 で 整 列 さ せます。<br />
構 文<br />
ALIGN {expr{,offset{,pad{,padsize}}}}<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
expr 2 0 ~ 2 31 の 2 の 累 乗 を 返 す 数 値 式 を 指 定 し ます。<br />
offset 任 意 の 数 値 式 を 指 定 で き ます。<br />
pad 任 意 の 数 値 式 を 指 定 で き ます。<br />
padsize 1、 2、 または 4 を 指 定 できます。<br />
演 算<br />
現 在 の 位 置 は、 以 下 の 形 式 の 次 のア ド レ スで 整 列 さ れます。<br />
offset + n * expr<br />
expr が 指 定 さ れていない 場 合 、 ALIGN によ って 現 在 の 位 置 に 次 のワード (4 バ<br />
イ ト ) 境 界 が 設 定 さ れます。 以 前 の 位 置 と 現 在 の 新 しい 位 置 と の 間 にあ る 未<br />
使 用 の 空 間 は、 以 下 で 埋 め ら れます。<br />
• pad が 指 定 されている 場 合 は、 pad のコピー。<br />
• 以 下 すべての 条 件 が 満 た さ れてい る 場 合 は、 NOP 命 令 。<br />
— pad は 指 定 されていません。<br />
— ALIGN ディレクティブは、 <strong>ARM</strong> または Thumb 命 令 に 従 います。<br />
— 現 在 のセ ク シ ョ ンには、 AREA デ ィ レ ク テ ィ ブに 設 定 さ れた<br />
CODEALIGN 属 性 があ り ます。<br />
• それ 以 外 の 場 合 はゼロに 設 定 し ます。<br />
pad は、 padsize の 値 に 応 じ て、 バイ ト 、 ハーフ ワード、 またはワード と し て 処<br />
理 されます。 padsize が 指 定 さ れていない 場 合 、 pad は、 デフ ォル ト でデータ セ<br />
クションのバイ ト、Thumb コードのハーフワード、 <strong>ARM</strong> コードのワードにな<br />
ります。<br />
7-78 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
使 用 法<br />
ALIGN を 使 用 し て、 データ と コー ド を 適 切 な 境 界 で 整 列 させます。 このディレ<br />
ク テ ィ ブは、 一 般 的 に 以 下 の 状 況 で 必 要 と な り ます。<br />
• ADR Thumb 疑 似 命 令 は、 ワー ド 境 界 で 整 列 さ れたア ド レ ス し か ロー ド で<br />
きませんが、 Thumb コード 内 のラベルはワード 境 界 で 整 列 されていない<br />
場 合 があ り ます。 このよ うな 場 合 は、ALIGN 4 を 使 用 して、 Thumb コード<br />
内 のア ド レ ス を 4 バイ ト 境 界 調 整 で 整 列 させる こ と がで き ます。<br />
• ALIGN を 使 用 する と、 一 部 の <strong>ARM</strong> プロセッサに 搭 載 されているキャッ<br />
シ ュ を 利 用 する こ と がで き ます。 例 えば、 <strong>ARM</strong>940T には、 16 バイ トの<br />
ラインから 構 成 されるキャッシュがあります。 このよ うな 場 合 は、ALIGN<br />
16 を 使 用 して、 関 数 エン ト リ を 16 バイ ト 境 界 で 整 列 させてキャッシュ<br />
の 効 果 を 最 大 限 に 高 める こ と ができ ます。<br />
• LDRD および LDRD のダブルワー ド データ 転 送 命 令 は、 8 バイ ト 境 界 で 整 列<br />
させる 必 要 があり ます。 LDRD または STRD を 使 用 してデータにアクセスす<br />
る 場 合 は、 DCQ (「データ 定 義 デ ィ レ ク テ ィ ブ」 (ページ 7-18) を 参 照 )<br />
などのメモリ 割 り 当 てディ レクティブの 前 に ALIGN 8 を 使 用 します。<br />
• ラベルだけの 行 は 任 意 の 境 界 で 整 列 さ れます。 それに 続 く <strong>ARM</strong> コード<br />
はワード 境 界 で 整 列 されます (Thumb コー ド はハーフ ワー ド 境 界 で 整 列<br />
されます)。 そのため、 このラベルではコードが 正 し く ア ド レス 指 定 さ<br />
れません。 このよ うな 場 合 は、 ラベルの 前 に ALIGN 4 (Thumb の 場 合 は<br />
ALIGN 2) を 使 用 します。<br />
境 界 調 整 は、 ルーチンが 配 置 さ れる ELF セ ク シ ョ ンの 開 始 位 置 か ら 相 対 的 に<br />
行 われます。 ELF セクションは、 同 じ 境 界 またはそれよ り も 粗 い 境 界 で 整 列<br />
させる 必 要 があり ます。 AREA ディレクティブの ALIGN 属 性 は 異 な る 方 法 で 指 定<br />
されます (「AREA」 (ページ 7-81) および 「「 例 」」 を 参 照 )。<br />
例<br />
AREA cacheable, CODE, ALIGN=3<br />
rout1 ; code ; aligned on 8-byte boundary<br />
; code<br />
MOV pc,lr ; aligned only on 4-byte boundary<br />
ALIGN 8 ; now aligned on 8-byte boundary<br />
rout2 ; code<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-79<br />
Non-Confidential
ディレクティブリファレンス<br />
AREA OffsetExample, CODE<br />
DCB 1 ; This example places the two<br />
ALIGN 4,3 ; bytes in the first and fourth<br />
DCB 1 ; bytes of the same word.<br />
AREA Example, CODE, READONLY<br />
start LDR r6,=label1<br />
; code<br />
MOV pc,lr<br />
label1 DCB 1 ; pc now misaligned<br />
ALIGN<br />
; ensures that subroutine1 addresses<br />
subroutine1<br />
; the following instruction.<br />
MOV r5,#0x5<br />
7-80 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.8.2 AREA<br />
AREA ディレクティブは、 新 しいコードセクションまたはデータセクションを<br />
アセンブルするよ う アセンブラに 指 示 します。 これらのセクショ ンは、 リ ン<br />
カに よ って 操 作 さ れる、 名 前 付 き で 独 立 し た 分 割 不 可 能 な コー ド ま たはデー<br />
タのかたま りです。 詳 細 については、 「ELF セクションと AREA ディレクティ<br />
ブ」 (ページ 2-16) を 参 照 して 下 さい。<br />
構 文<br />
AREA sectionname{,attr}{,attr}...<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
sectionname<br />
attr<br />
セ ク シ ョ ンに 割 り 当 て る 名 前 を 指 定 し ます。<br />
セクシ ョ ンには 任 意 の 名 前 を 指 定 できます。 ただし、 アル<br />
フ ァベ ッ ト 以 外 の 文 字 で 始 ま る 名 前 は 縦 棒 で 囲 む 必 要 があ<br />
り ます。 これに 反 すると、 セクショ ン 名 エラーが 生 成 され<br />
ます。 以 下 に 例 を 示 し ます。 |1_DataArea|<br />
定 型 の 名 前 は 従 来 どお り です。 例 えば、 |.text| は、 C コン<br />
パイラによって 生 成 されるコードセクシ ョ ン、 または C ラ<br />
イ ブ ラ リ に 関 連 付 け ら れた コー ド セ ク シ ョ ンに 使 用 さ れま<br />
す。<br />
1 つ 以 上 のセ ク シ ョ ン 属 性 を コ ンマで 区 切 っ て 指 定 し ま<br />
す。 有 効 な 属 性 は 以 下 の と お り です。<br />
ALIGN=expression<br />
デフォル ト では、 ELF セクションは 4 バイ ト 境<br />
界 で 整 列 されます。expression には 0 ~ 31 の 任 意<br />
の 整 数 値 を 指 定 で き ます。 こ のセ ク シ ョ ンは<br />
2 expression- バイ ト 境 界 で 整 列 されます。 例 えば、<br />
expression に 10 が 指 定 されている 場 合 、 こ のセ ク<br />
ションは 1KB 境 界 で 整 列 さ れます。<br />
これは、ALIGN デ ィ レ ク テ ィ ブの 指 定 方 法 と は 異<br />
なります。 詳 細 については、 「ALIGN」 (ページ<br />
7-78) を 参 照 して 下 さい。<br />
注<br />
<strong>ARM</strong> コードセクシ ョ ンには ALIGN=0 または<br />
ALIGN=1 を 使 用 しないで 下 さい。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-81<br />
Non-Confidential
ディレクティブリファレンス<br />
Thumb コードセクシ ョ ンには ALIGN=0 を 使 用 しな<br />
いで 下 さい。<br />
ASSOC=section<br />
section には、 関 連 する ELF セクションを 指 定 し<br />
ます。 sectionname は、 section を 含 むすべての リ<br />
ンクに 含 まれている 必 要 があります。<br />
CODE マシン 命 令 を 保 持 し ます。 READONLY がデフ ォル ト<br />
です。<br />
CODEALIGN<br />
ALIGN ディレクティブが 異 なるパディングを 指 定<br />
しない 限 り、 セクション 内 の ALIGN ディレクティ<br />
ブが <strong>ARM</strong> または Thumb 命 令 後 に 使 用 さ れる 際<br />
に、 アセンブラによ って NOP 命 令 が 挿 入 さ れま<br />
す。<br />
COMDEF<br />
共 通 セ ク シ ョ ンの 定 義 です。 この ELF セクショ<br />
ンは、 コード またはデータを 保 持 できます。 この<br />
セクションは、 他 のソースファイル 内 にある 同<br />
じ 名 前 の 付 いた 他 のセ ク シ ョ ン と 同 じであ る 必<br />
要 があ り ます。<br />
同 じ 名 前 の 付 いた 同 一 の ELF セクションは、 リ<br />
ンカによって 同 じ メモリセクショ ンにオーバー<br />
レイされます。 これらのセクショ ンが 異 なってい<br />
る と 、 リ ン カに よ っ て 警 告 メ ッ セージが 生 成 さ<br />
れ、 セ ク シ ョ ンのオーバーレ イは 行 われません。<br />
『リンカユーザガイド』 の 第 3 章 基 本 リ ンカ 機 能<br />
の 使 用 を 参 照 して 下 さい。<br />
COMGROUP=symbol_name<br />
COMMON<br />
共 通 グループセ ク シ ョ ンです。 共 通 グループセ ク<br />
ション 内 のすべてのセクションは 共 通 です。 オブ<br />
ジェク トがリンクされると、 他 のオブジェク ト<br />
ファイルは、 署 名 が symbol_name の GROUP を 持<br />
ちます。 1 つのグループのみが 最 終 イ メ ージに 保<br />
持 されます。<br />
共 通 データ セ ク シ ョ ンです。 このセクション 内 で<br />
はコード またはデータは 定 義 でき ません。 このセ<br />
ク シ ョ ンは、 リ ン カに よ っ てゼ ロ に 初 期 化 さ れ<br />
ます。 同 じ 名 前 の 付 いたすべての 共 通 セ ク シ ョ ン<br />
7-82 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
DATA<br />
は、 リ ンカによ って 同 じ メ モ リ セ ク シ ョ ンに<br />
オーバーレ イ されます。 すべてのセ ク シ ョ ンが 同<br />
じサイズである 必 要 はあり ません。 リンカは、 同<br />
じ 名 前 の 付 いたセ ク シ ョ ンの う ち 最 も 大 きな 共<br />
通 セ ク シ ョ ンに 必 要 と されるだけの 空 間 を 割 り<br />
当 てます。<br />
命 令 ではな く 、 データ を 保 持 し ます。 READWRITE<br />
がデフ ォル ト です。<br />
FINI_ARRAY<br />
現 在 の 領 域 の ELF 型 を SHT_FINI_ARRAY に 設 定 し ま<br />
す。<br />
GROUP=symbol_name<br />
グループの 署 名 を 指 定 し ます。 ソースフ ァ イル、<br />
またはソースファイルに 含 まれるファイルに<br />
よ って 定 義 さ れる 必 要 があ り ます。 同 じ<br />
symbol_name 署 名 内 のすべての AREAS は、 同 じ グ<br />
ループに 配 置 されます。 グループ 内 のセ ク シ ョ ン<br />
は、 一 緒 に 保 持 ま たは 検 出 さ れます。<br />
INIT_ARRAY<br />
現 在 の 領 域 の ELF 型 を SHT_INIT_ARRAY に 設 定 し ま<br />
す。<br />
LINKORDER=section<br />
MERGE=n<br />
NOALLOC<br />
イ メ ージ 内 での 現 在 のセ ク シ ョ ンの 相 対 的 な 位<br />
置 を 指 定 し ます。 その 結 果 、 LINKORDER 属 性 を 備 え<br />
るセ ク シ ョ ンすべての 順 序 が、 互 いに 関 し て イ<br />
メ ージ 内 で 対 応 する 名 前 付 き sections の 順 序 と<br />
同 じになり ます。<br />
リンカが 現 在 のセクションを MERGE=n 属 性 を 備 え<br />
た 他 のセク シ ョ ン と マージでき る こ と を 示 し ま<br />
す。 n はセク シ ョ ン 内 の 要 素 のサイズです。 例 え<br />
ば、 文 字 の 場 合 には n は 1 です。 この 属 性 があっ<br />
ても リンカはセクションのマージを 強 制 されな<br />
いので、 必 ずし もセクシ ョ ンがマージされる と<br />
は 限 り ません。<br />
ターゲッ ト システム 上 のメモリがこのエリ アに<br />
割 り 当 てられないことを 示 します。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-83<br />
Non-Confidential
ディレクティブリファレンス<br />
NOINIT<br />
データ セ ク シ ョ ンが 初 期 化 さ れていないか、 ま<br />
たはゼ ロ に 初 期 化 さ れてい る こ と を 示 し ます。 こ<br />
の 属 性 に 含 まれるのは、 空 間 予 約 デ ィ レ ク テ ィ<br />
ブ SPACE か、 初 期 値 がゼロに 設 定 された DCB、 DCD、<br />
DCDU、 DCQ、 DCQU、 DCW、 または DCWU ディレクティブ<br />
だけです。 エ リ ア を 初 期 化 し ないか、 ま たはゼ ロ<br />
で 初 期 化 する かは リ ン ク 時 に 決 め る こ と がで き<br />
ます。 『リンカユーザガイド』 の 第 3 章 基 本 リ<br />
ンカ 機 能 の 使 用 を 参 照 して 下 さい。<br />
PREINIT_ARRAY<br />
現 在 の 領 域 の ELF 型 を SHT_PREINIT_ARRAY に 設 定<br />
します。<br />
READONLY このセクションへの 書 き 込 みが 禁 止 されている<br />
ことを 示 します。 コード エ リ アの 場 合 はこれがデ<br />
フォルトです。<br />
READWRITE こ のセ ク シ ョ ンに 対 する 読 み 出 し と 書 き 込 みが<br />
可 能 な こ と を 示 し ます。 データ エ リ アの 場 合 は こ<br />
れがデフ ォル ト です。<br />
SECFLAGS=n<br />
SECTYPE=n<br />
STRINGS<br />
現 在 のセ ク シ ョ ンに ELF フラグを 1 つ 以 上 (n で<br />
指 定 されます) 追 加 します。<br />
現 在 のセ ク シ ョ ンの ELF 型 を n に 設 定 し ます。<br />
現 在 のセ ク シ ョ ンに SHF_STRINGS フラグを 追 加 し<br />
ます。 STRINGS 属 性 を 使 用 するには、 MERGE=1 属 性<br />
も 使 用 する 必 要 があ り ます。 セクションのコンテ<br />
ンツは、DCB ディレクティブを 使 用 して NULL で<br />
終 わる 文 字 列 である 必 要 があ り ます。<br />
使 用 法<br />
AREA ディレクティブを 使 用 して、 ソースファイルを 複 数 の ELF セクションに<br />
分 割 し ます。 複 数 の AREA デ ィ レ ク テ ィ ブで 同 じ 名 前 を 使 用 で き ます。 同 じ 名 前<br />
の 付 いたエ リ アはすべて、 同 じ ELF セ ク シ ョ ンに 配 置 さ れます。 特 定 の 名 前<br />
の 付 いた 最 初 の AREA ディレクティブの 属 性 だけが 適 用 されます。<br />
7-84 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
通 常 、 コー ド と データ には 別 々の ELF セクションを 使 用 する 必 要 がありま<br />
す。 大 き なプ ロ グ ラ ムは、 扱 いやすい よ う に 複 数 のコー ド セ ク シ ョ ンに 分 割<br />
できます。 ま た、 大 き な 独 立 データ セ ッ ト も 別 々のセ ク シ ョ ンに 配 置 するの<br />
が 適 切 です。<br />
ローカル ラベルの 有 効 範 囲 は、 AREA ディレクティブによって 定 義 され、 必 要<br />
に 応 じ て ROUT ディレクティブによって 分 割 されます (「ローカルラベル」<br />
(ページ 3-33) および「ROUT」 (ページ 7-104) を 参 照 )。<br />
アセンブ リ には 少 な く と も 1 つの AREA ディレクティブが 必 要 です。<br />
例<br />
以 下 の 例 では、 Example と い う 名 前 の 読 み 出 し 専 用 の コー ド セ ク シ ョ ン を 定 義<br />
します。<br />
AREA Example,CODE,READONLY ; An example code section.<br />
; code<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-85<br />
Non-Confidential
ディレクティブリファレンス<br />
7.8.3 ATTR<br />
ATTR ディレクティブセッ トは、 ABI ビル ド 属 性 の 値 を 設 定 し ます。<br />
ATTR ス コープデ ィ レ ク テ ィ ブは、 設 定 値 の 適 用 先 の 有 効 範 囲 を 指 定 し ます。<br />
構 文<br />
ATTR FILESCOPE<br />
ATTR SCOPE name<br />
ATTR settype, tagid, value<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
name<br />
settype<br />
tagid<br />
value<br />
セクシ ョ ン 名 またはシンボル 名 を 指 定 します。<br />
次 のいずれかを 指 定 でき ます。<br />
• SETVALUE<br />
• SETSTRING<br />
• SETCOMPATIBLEWITHVALUE<br />
• SETCOMPATIBLEWITHSTRING<br />
属 性 タ グ 名 (ま たはその 数 値 ) を 指 定 し ます。 こ れは、 <strong>ARM</strong><br />
アーキテクチャの ABI で 定 義 されます。<br />
settype に 依 存 し ます。<br />
• 32 ビ ッ ト 整 数 値 (settype が SETVALUE または<br />
SETCOMPATIBLEWITHVALUE の 場 合 )<br />
• NULL で 終 わる 文 字 列 (settype が SETSTRING または<br />
SETCOMPATIBLEWITHSTRING の 場 合 )<br />
使 用 法<br />
ATTR FILESCOPE ディレクティブに 続 く ATTR 設 定 デ ィ レ ク テ ィ ブは、 オブジ ェ ク<br />
トファイル 全 体 に 適 用 されます。 ATTR SCOPE name ディレクティブに 続 く ATTR 設<br />
定 デ ィ レ ク テ ィ ブは、 名 前 付 き セ ク シ ョ ン ま たはシンボルだけに 適 用 さ れま<br />
す。<br />
7-86 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
整 数 が 必 要 な タ グの 場 合 、 SETVALUE または SETCOMPATIBLEWITHVALUE を 使 用 する 必<br />
要 があ り ます。 文 字 列 が 来 る こ と になってい る タ グの 場 合 、 SETSTRING または<br />
SETCOMPATIBLEWITHSTRING を 使 用 する 必 要 があ り ます。 タ グ 名 の リ ス ト について<br />
は、 「ABI for the <strong>ARM</strong> Architecture」 の 追 捕 表 および 正 誤 表 を 参 照 し て 下 さ い。<br />
SETCOMPATIBLEWITHVALUE と SETCOMPATIBLEWITHSTRING を 使 用 して、 オブジェ ク ト<br />
フ ァ イルも 互 換 性 を 備 える タグ 値 を 設 定 し ます。<br />
例<br />
ATTR SETSTRING Tag_CPU_raw_name, "Cortex-A8"<br />
ATTR SETVALUE Tag_VFP_arch, 3 ; VFPv3 instructions were permitted.<br />
ATTR SETVALUE 10, 3<br />
; 10 is the numerical value of<br />
; Tag_VFP_arch.<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-87<br />
Non-Confidential
ディレクティブリファレンス<br />
7.8.4 END<br />
END ディレクティブは、 ソースファイルの 終 わりに 到 達 したことをアセンブラ<br />
に 通 知 し ます。<br />
構 文<br />
END<br />
使 用 法<br />
すべてのアセンブ リ 言 語 の ソ ース フ ァ イ ルは、 END ディレクティブが 単 独 で 記<br />
述 さ れた 行 で 終 了 する 必 要 があ り ます。<br />
GET ディレクティブによってソースファイルがペアレントファイルにインク<br />
ルー ド されている 場 合 、 アセンブ ラはペア レ ン ト フ ァ イルに 戻 り 、 GET ディレ<br />
ク テ ィ ブの 次 の 行 から アセンブルを 継 続 し ます。 詳 細 については、 「GET、<br />
INCLUDE」 (ページ 7-95) を 参 照 して 下 さい。<br />
トップレベルのソースファイル 内 で、エラーが 発 生 することなく 第 1 パスで<br />
END に 到 達 する と 、 第 2 パスが 開 始 されます。<br />
トップレベルのソースファイル 内 で、 第 2 パスで END に 到 達 する と、 アセンブ<br />
ラ はアセンブ リ を 終 了 し て 適 切 な 出 力 を 行 います。<br />
7.8.5 ENTRY<br />
ENTRY ディレクティブは、 プログラムへのエント リポイントを 宣 言 します。<br />
構 文<br />
ENTRY<br />
使 用 法<br />
プログラムには 少 なく と も 1 つの ENTRY ポ イ ン ト を 指 定 する 必 要 があ り ます。<br />
ENTRY が 存 在 し ない 場 合 は、 リ ン ク 時 に 警 告 メ ッ セージが 生 成 されます。<br />
1 つのソース フ ァ イル 内 で 複 数 の ENTRY デ ィ レ ク テ ィ ブを 使 用 する こ と はで き<br />
ません。 また、 すべてのソースファイル 内 に ENTRY ディレクティブを 指 定 する<br />
必 要 があ る わけではあ り ません。 1 つのソース フ ァ イル 内 に 複 数 の ENTRY が 存<br />
在 する と 、 アセンブ リ 時 にエ ラー メ ッ セージが 生 成 さ れます。<br />
7-88 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
例<br />
AREA<br />
ENTRY<br />
<strong>ARM</strong>ex, CODE, READONLY<br />
; Entry point for the application<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-89<br />
Non-Confidential
ディレクティブリファレンス<br />
7.8.6 EQU<br />
EQU デ ィ レ ク テ ィ ブは、 数 値 定 数 、 レ ジ ス タ 相 対 値 、 ま たはプ ロ グ ラ ム 相 対 値<br />
にシンボル 名 を 割 り 当 てます。 * は EQU と 同 じ 意 味 です。<br />
構 文<br />
name EQU expr{, type}<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
name<br />
expr<br />
値 に 割 り 当 て る シンボル 名 を 指 定 し ます。<br />
レ ジ ス タ 相 対 ア ド レ ス、 プ ロ グ ラ ム 相 対 ア ド レ ス、 絶 対 ア ド レ<br />
ス、 または 32 ビ ッ ト 整 数 定 数 のいずれかを 指 定 し ます。<br />
type は、 オプシ ョ ンです。 type には、 以 下 のいずれかを 指 定 でき ま<br />
す。<br />
• <strong>ARM</strong><br />
• THUMB<br />
• CODE32<br />
• CODE16<br />
• DATA<br />
type は、 expr が 絶 対 ア ド レ スの 場 合 にのみ 使 用 で き ます。 name が<br />
エクスポート される 場 合 、 オブジェク ト ファイル 内 のシンボル<br />
テーブルに 含 まれる name エン ト リは、type に 指 定 されている 値 に<br />
基 づいて <strong>ARM</strong>、 THUMB、 CODE32、 CODE16、 または DATA のいずれか と し<br />
てマーク されます。 こ の 情 報 は リ ン カに よ って 使 用 さ れます。<br />
使 用 法<br />
EQU を 使 用 して 定 数 を 定 義 します。 これは、C 言 語 で #define を 使 用 して 定 数 を<br />
定 義 する 方 法 と 似 ています。<br />
シンボルのエクスポートについては、 「KEEP」 (ページ 7-101) および<br />
「EXPORT、 GLOBAL」 (ページ 7-92) を 参 照 して 下 さい。<br />
7-90 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
例<br />
abc EQU 2<br />
xyz EQU label+8<br />
fiq EQU 0x1C, CODE32<br />
; assigns the value 2 to the symbol abc.<br />
; assigns the address (label+8) to the<br />
; symbol xyz.<br />
; assigns the absolute address 0x1C to<br />
; the symbol fiq, and marks it as code<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-91<br />
Non-Confidential
ディレクティブリファレンス<br />
7.8.7 EXPORT、 GLOBAL<br />
EXPORT ディレクティブは、 個 別 のオブジェク トファイルとライブラ リファイ<br />
ルに 含 まれるシンボルへの 参 照 を 解 決 するために リ ンカが 使 用 でき るシンボ<br />
ルを 宣 言 します。 GLOBAL は EXPORT と 同 じ 意 味 です。<br />
構 文<br />
EXPORT {[WEAK]}<br />
EXPORT symbol {[type]}<br />
EXPORT symbol [attr{,type}]<br />
EXPORT symbol [WEAK{,attr}{,type}]<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
symbol<br />
WEAK<br />
attr<br />
type<br />
エクスポートするシンボル 名 を 指 定 します。 シンボル 名 では 大 文<br />
字 と 小 文 字 が 区 別 さ れます。 symbol が 省 略 さ れてい る 場 合 は、 す<br />
べてのシンボルがエク スポー ト されます。<br />
他 のソースによ って 別 の symbol がエク スポー ト されない 場 合 に<br />
のみ、 symbol は 他 の ソースにイ ンポー ト されます。 symbol を 指 定<br />
せずに [WEAK] を 指 定 する と 、 エ ク ス ポー ト さ れるすべてのシン<br />
ボルが WEAK にな り ます。<br />
次 のいずれかを 指 定 でき ます。<br />
DYNAMIC<br />
ELF シンボルの 可 視 性 を STV_DEFAULT に 設 定 し ます。<br />
PROTECTED ELF シンボルの 可 視 性 を STV_PROTECTED に 設 定 し ます。<br />
HIDDEN<br />
INTERNAL<br />
ELF シンボルの 可 視 性 を STV_HIDDEN に 設 定 し ます。<br />
ELF シンボルの 可 視 性 を STV_INTERNAL に 設 定 し ます。<br />
シンボル 型 を 指 定 します。<br />
DATA ソースがアセンブルされリ ンク される と、symbol はデー<br />
タとして 扱 われます。<br />
CODE ソースがアセンブルされリ ンク される と、symbol はコー<br />
ドとして 扱 われます。<br />
ELFTYPE=n n の 値 に 従 って、 symbol は 特 定 の ELF シンボルと して 扱<br />
われます。 ただし、 n は 0 ~ 15 の 任 意 の 値 を 取 り ます。<br />
指 定 さ れない 場 合 、 アセンブ ラ は 最 適 な 型 を 選 択 し ます。<br />
7-92 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
使 用 法<br />
EXPORT を 使 用 し て、 他 のフ ァ イルのコード が 現 在 のフ ァ イルのシンボルにア<br />
クセスできるようにします。<br />
[WEAK] 属 性 を 使 用 し て、 symbol の 別 のインスタンスが 別 のソースに 存 在 する 場<br />
合 は、 そのインスタンスがこのインスタンスに 優 先 されることをリンカに 通<br />
知 します。 [WEAK] 属 性 は、 任 意 のシンボルの 可 視 化 属 性 と 共 に 使 用 で き ます。<br />
「IMPORT、 EXTERN」 (ページ 7-97) も 参 照 して 下 さい。<br />
シンボルの 可 視 性 の 詳 細 については、 www.infocenter.arm.com から 入 手 できる<br />
ABI ドキュメントの 『ELF for the <strong>ARM</strong> Architecture』 を 参 照 して 下 さい。<br />
例<br />
AREA Example,CODE,READONLY<br />
EXPORT DoAdd<br />
; Export the function name<br />
; to be used by external<br />
; modules.<br />
DoAdd ADD r0,r0,r1<br />
エ ク ス ポー ト が 重 複 する 場 合 、 シンボルの 可 視 化 はオーバーラ イ ド さ れる こ<br />
とがあります。 以 下 の 例 では、 最 後 の EXPORT のバイ ン ド と 可 視 化 が 優 先 さ れ<br />
ます。<br />
EXPORT SymA[WEAK]<br />
EXPORT SymA[DYNAMIC]<br />
; Export as weak-hidden<br />
; SymA becomes non-weak dynamic.<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-93<br />
Non-Confidential
ディレクティブリファレンス<br />
7.8.8 EXPORTAS<br />
EXPORTAS デ ィ レ ク テ ィ ブを 使 用 する と 、 ソース フ ァ イル 内 の 別 のシンボルに<br />
対 応 する、 シンボルをオブジ ェ ク ト フ ァ イ ルにエ ク ス ポー ト で き ます。<br />
構 文<br />
EXPORTAS symbol1, symbol2<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
symbol1<br />
symbol2<br />
ソースファイル 内 のシンボルの 名 前 を 指 定 します。symbol1 は 事<br />
前 に 定 義 されている 必 要 があ り ます。 この 名 前 には、 エリア 名 、<br />
ラベル、 ま たは 定 数 を 含 むシンボルを 指 定 で き ます。<br />
オブジ ェ ク ト フ ァ イルで 使 用 する シンボルの 名 前 を 指 定 し ます。<br />
シンボル 名 では 大 文 字 と 小 文 字 が 区 別 さ れます。<br />
使 用 法<br />
EXPORTAS を 使 用 する と 、 ソース フ ァ イル 内 の 各 イ ン ス タ ン ス を 変 更 する こ と<br />
な く 、 オブジ ェ ク ト フ ァ イル 内 のシンボルを 変 更 する こ と がで き ます。<br />
「EXPORT、 GLOBAL」 (ページ 7-92) も 参 照 して 下 さい。<br />
例<br />
AREA data1, DATA ; starts a new area data1<br />
AREA data2, DATA ; starts a new area data2<br />
EXPORTAS data2, data1 ; the section symbol referred to as data2 will<br />
; appear in the object file string table as data1.<br />
one EQU 2<br />
EXPORTAS one, two<br />
EXPORT one<br />
; the symbol 'two' will appear in the object<br />
; file's symbol table with the value 2.<br />
7-94 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.8.9 GET、 INCLUDE<br />
GET デ ィ レ ク テ ィ ブは、 アセンブル 中 のフ ァ イル 内 に 別 のフ ァ イルを イ ン ク<br />
ルー ド し ます。 インクルードされるファイルは、GET ディレクティブの 位 置 で<br />
アセンブルされます。 INCLUDE は GET と 同 じ 意 味 です。<br />
構 文<br />
GET filename<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
filename<br />
アセンブ リ 時 にインクルード されるフ ァ イルの 名 前 を 指 定 し ま<br />
す。 アセンブラは UNIX 形 式 ま たは MS-DOS 形 式 のパス 名 を 認 識<br />
します。<br />
使 用 法<br />
GET は、 アセンブ リ 時 にマ ク ロ 定 義 、 EQU、 および 記 憶 域 マ ッ プを イ ン ク ルー<br />
ドするのに 便 利 です。 インクルードされたファイルのアセンブルが 完 了 する<br />
と、 アセンブラは GET デ ィ レ ク テ ィ ブの 次 の 行 から アセンブルを 継 続 し ます。<br />
デフォル ト では、 アセンブラは、 現 在 の 場 所 でインクルード されるファ イル<br />
を 検 索 し ます。 現 在 の 場 所 と は、 呼 び 出 し 元 のフ ァ イルが 存 在 するデ ィ レ ク<br />
トリを 指 します。 検 索 パスにデ ィ レ ク ト リ を 追 加 する には、 アセンブ ラ の -i<br />
コマンド ラインオプショ ンを 使 用 します。 スペースを 含 むフ ァ イル 名 および<br />
ディ レ ク ト リ 名 を 二 重 引 用 符 (" ") で 囲 まないで 下 さい。<br />
インクルードされるファイル 内 で 別 の GET ディレクティブを 使 用 して、 他 の<br />
ファイルをインクルードできます (「ネステ ィ ングデ ィ レ ク テ ィ ブ」 (ページ<br />
7-36) を 参 照 )。<br />
インクルードされるファイルが 現 在 の 場 所 とは 異 なるディレク ト リにある 場<br />
合 は、 イ ン クルー ド される フ ァ イルの 終 わ り まで、 そのデ ィ レ ク ト リ が 現 在<br />
の 場 所 と な り ます。 その 後 、 前 の 場 所 が 復 元 さ れます。<br />
GET を 使 用 して、 オブジェ ク ト フ ァ イルをインクルードする こ とはできません<br />
(「INCBIN」 (ページ 7-100) を 参 照 )。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-95<br />
Non-Confidential
ディレクティブリファレンス<br />
例<br />
AREA Example, CODE, READONLY<br />
GET file1.s ; includes file1 if it exists<br />
; in the current place.<br />
GET c:\project\file2.s ; includes file2<br />
GET c:\Program files\file3.s ; space is permitted<br />
7-96 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.8.10 IMPORT、 EXTERN<br />
これらのディ レ クテ ィブは、 現 在 のアセンブ リ に 定 義 されていない 名 前 をア<br />
センブラに 渡 します。<br />
構 文<br />
directive symbol {[type]}<br />
directive symbol [attr{,type}]<br />
directive symbol [WEAK{,attr}{,type}]<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
directive<br />
symbol<br />
WEAK<br />
attr<br />
type<br />
次 のいずれかを 指 定 でき ます。<br />
IMPORT<br />
EXTERN<br />
シンボルを 無 条 件 に イ ンポー ト し ます。<br />
シンボルが 現 在 のアセンブリで 参 照 される 場 合 にのみ、<br />
インポート します。<br />
別 々にアセンブル さ れた ソース フ ァ イル、 オブジ ェ ク ト フ ァ イ<br />
ル、 またはラ イブラ リ 内 で 定 義 されているシンボルの 名 前 を 指<br />
定 します。 シンボル 名 では 大 文 字 と 小 文 字 が 区 別 さ れます。<br />
シンボルがどこにも 定 義 されていない 場 合 に、 リ ンカによって<br />
エラーメ ッセージが 生 成 されるのを 回 避 します。 また、 このオプ<br />
ションを 指 定 すると、 リンカはインクルードされていないライ<br />
ブラ リの 検 索 も 行 いません。<br />
次 のいずれかを 指 定 でき ます。<br />
DYNAMIC ELF シンボルの 可 視 性 を STV_DEFAULT に 設 定 し ます。<br />
PROTECTED ELF シンボルの 可 視 性 を STV_PROTECTED に 設 定 し ます。<br />
HIDDEN<br />
INTERNAL<br />
ELF シンボルの 可 視 性 を STV_HIDDEN に 設 定 し ます。<br />
ELF シンボルの 可 視 性 を STV_INTERNAL に 設 定 し ます。<br />
シンボル 型 を 指 定 し ます。<br />
DATA ソースがアセンブルされリ ンク される と、symbol はデー<br />
タとして 扱 われます。<br />
CODE ソースがアセンブルされリ ンク される と、symbol はコー<br />
ドとして 扱 われます。<br />
ELFTYPE=n n の 値 に 従 って、 symbol は 特 定 の ELF シンボルと して 扱<br />
われます。 ただし、 n は 0 ~ 15 の 任 意 の 値 を 取 り ます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-97<br />
Non-Confidential
ディレクティブリファレンス<br />
指 定 さ れない 場 合 、 リ ン カは 最 適 な 型 を 選 択 し ます。<br />
7-98 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
使 用 法<br />
別 のオブジェ ク ト フ ァ イル 内 で 定 義 されたシンボルへの リ ン ク 時 に、 シンボ<br />
ル 名 が 解 決 されます。 このシンボルはプログラムのアドレスとして 処 理 され<br />
ます。 [WEAK] が 指 定 さ れていない 場 合 、 対 応 する シンボルが リ ン ク 時 に 検 出 さ<br />
れないと、 リ ンカによ ってエラーが 生 成 されます。<br />
[WEAK] が 指 定 されており、 対 応 するシンボルがリ ンク 時 に 検 出 されない 場 合<br />
は、 以 下 の よ う にな り ます。<br />
• 参 照 が B 命 令 ま たは BL 命 令 のデス テ ィ ネーシ ョ ンであ る 場 合 、 シンボル<br />
の 値 が 次 の 命 令 のア ド レ ス と し て 使 用 されます。 したがって、 この B 命<br />
令 または BL 命 令 は NOP となります。<br />
• それ 以 外 の 場 合 、 シンボルの 値 はゼ ロ と 見 な さ れます。<br />
シンボルの 可 視 性 の 詳 細 については、 www.infocenter.arm.com から 入 手 できる<br />
ABI ドキュメントの 『ELF for the <strong>ARM</strong> Architecture』 を 参 照 して 下 さい。<br />
例<br />
この 例 では、 C++ ラ イ ブ ラ リ が リ ン ク さ れていて、 演 算 結 果 に 基 づいて 条 件<br />
分 岐 が 発 生 する かど う かを 確 認 し ています。<br />
AREA Example, CODE, READONLY<br />
EXTERN __CPP_INITIALIZE[WEAK] ; If C++ library linked, gets the address of<br />
; __CPP_INITIALIZE function.<br />
LDR r0,=__CPP_INITIALIZE ; If not linked, address is zeroed.<br />
CMP r0,#0 ; Test if zero.<br />
BEQ nocplusplus ; Branch on the result.<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-99<br />
Non-Confidential
ディレクティブリファレンス<br />
7.8.11 INCBIN<br />
INCBIN デ ィ レ ク テ ィ ブは、 アセンブル 中 のフ ァ イル 内 に 別 のフ ァ イルを イ ン<br />
クルードします。 このファイルはアセンブルされずにそのままインクルード<br />
されます。<br />
構 文<br />
INCBIN filename<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
filename<br />
アセンブ リ 時 にインクルード されるフ ァ イルの 名 前 を 指 定 しま<br />
す。 アセンブラは UNIX 形 式 ま たは MS-DOS 形 式 のパス 名 を 認 識<br />
します。<br />
使 用 法<br />
INCBIN を 使 用 し て、 実 行 可 能 フ ァ イル、 リ テ ラ ル、 ま たは 任 意 のデータ を イ<br />
ンクルードできます。 ファイルの 内 容 は、 解 釈 されることなく、 現 在 の ELF<br />
セ ク シ ョ ンにバ イ ト 単 位 で 追 加 さ れます。 アセンブルは、 INCBIN ディレクティ<br />
ブの 次 の 行 から 継 続 されます。<br />
デフォル ト では、 アセンブラは、 現 在 の 場 所 でインクルード されるフ ァ イル<br />
を 検 索 し ます。 現 在 の 場 所 と は、 呼 び 出 し 元 のフ ァ イルが 存 在 するデ ィ レ ク<br />
トリを 指 します。 検 索 パスにデ ィ レ ク ト リ を 追 加 する には、 アセンブ ラ の -i<br />
コマンド ラインオプショ ンを 使 用 します。 スペースを 含 むファ イル 名 および<br />
デ ィ レ ク ト リ 名 を 二 重 引 用 符 (" ") で 囲 まないで 下 さい。<br />
例<br />
AREA Example, CODE, READONLY<br />
INCBIN file1.dat<br />
INCBIN c:\project\file2.txt<br />
; includes file1 if it<br />
; exists in the<br />
; current place.<br />
; includes file2<br />
7-100 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.8.12 KEEP<br />
KEEP ディレクティブは、 オブジェク トファイル 内 のシンボルテーブルにロー<br />
カルシンボルを 保 持 しておく よ う アセンブラに 指 示 し ます。<br />
構 文<br />
KEEP {symbol}<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
symbol<br />
保 持 する ローカルシンボルの 名 前 を 指 定 し ます。 symbol が 指 定 さ<br />
れていない 場 合 は、 レジスタ 相 対 シンボルを 除 くすべてのロー<br />
カルシンボルが 保 持 されます。<br />
使 用 法<br />
デフォル ト では、 アセンブラによって 出 力 されるオブジェ ク ト フ ァ イル 内 に<br />
記 述 さ れる シンボルは 以 下 のシンボルのみです。<br />
• エクスポート されるシンボル<br />
• 再 配 置 さ れる シンボル<br />
KEEP を 使 用 して、 デバッグに 使 用 でき る ローカルシンボルを 保 持 します。 保<br />
持 されたシンボルは、 <strong>ARM</strong> デバ ッ ガおよび リ ンカマ ッ プフ ァ イルに 出 力 され<br />
ます。<br />
KEEP では、 レジス タ 相 対 シンボルを 保 持 でき ません (「MAP」 (ページ 7-21)<br />
を 参 照 )。<br />
例<br />
label ADC r2,r3,r4<br />
KEEP label ; makes label available to debuggers<br />
ADD r2,r2,r5<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-101<br />
Non-Confidential
ディレクティブリファレンス<br />
7.8.13 NOFP<br />
NOFP デ ィ レ ク テ ィ ブは、 アセンブ リ 言 語 ソ ース フ ァ イル 内 の 浮 動 小 数 点 命 令<br />
を 禁 止 し ます。<br />
構 文<br />
NOFP<br />
使 用 法<br />
NOFP を 使 用 し て、 ソ フ ト ウ ェ ア ま たはターゲ ッ ト ハー ド ウ ェ アで 浮 動 小 数 点<br />
命 令 がサポー ト さ れていない 場 合 な どに、 浮 動 小 数 点 命 令 が 使 用 さ れる こ と<br />
を 防 ぎます。<br />
NOFP デ ィ レ ク テ ィ ブ よ り 後 に 浮 動 小 数 点 命 令 が 出 現 する と 、 Unknown opcode エ<br />
ラーが 生 成 され、 アセンブルに 失 敗 します。<br />
浮 動 小 数 点 命 令 よ り 後 に NOFP デ ィ レ ク テ ィ ブが 検 出 さ れる と 、 アセンブ ラ に<br />
よ って 以 下 のエラーが 生 成 されます。<br />
Too late to ban floating point instructions<br />
アセンブルに 失 敗 します。<br />
7.8.14 REQUIRE<br />
REQUIRE デ ィ レ ク テ ィ ブは、 セ ク シ ョ ン 間 の 依 存 関 係 を 指 定 し ます。<br />
構 文<br />
REQUIRE label<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
label<br />
必 要 な ラベルの 名 前 を 指 定 し ます。<br />
使 用 法<br />
REQUIRE を 使 用 する と 、 関 連 する セ ク シ ョ ンが 直 接 呼 び 出 さ れない 場 合 で も、<br />
そのセクシ ョ ンをイン クルードする こ とができ ます。 REQUIRE ディレクティブ<br />
を 含 むセクションがリンクにインクルードされる 場 合 、 リンカは、 指 定 され<br />
た ラベルの 定 義 を 含 むセ ク シ ョ ン も イ ン ク ルー ド し ます。<br />
7-102 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
7.8.15 REQUIRE8、 PRESERVE8<br />
REQUIRE8 ディレクティブは、 現 在 のファイルに 8 バイ ト 境 界 で 境 界 調 整 さ れた<br />
スタックが 必 要 であることを 指 定 します。 このディレクティブは、 このこと<br />
をリンカに 通 知 するために REQ8 ビル ド 属 性 を 設 定 し ます。<br />
PRESERVE8 ディレクティブは、 現 在 のファイルが 8 バイ ト 境 界 で 境 界 調 整 さ れ<br />
たスタックを 保 持 しているこ とを 指 定 します。 このディレクティブは、 この<br />
こ と を リ ンカに 通 知 する ために PRES8 ビルド 属 性 を 設 定 します。<br />
リンカは、8 バイ ト 境 界 で 境 界 調 整 さ れた ス タ ッ ク を 必 要 と する コー ド が、 8<br />
バ イ ト 境 界 で 境 界 調 整 さ れた ス タ ッ ク を 保 持 する コー ド に よ ってのみ 直 接 的<br />
ま たは 間 接 的 に 呼 び 出 さ れる こ と をチェ ッ ク し ます。<br />
構 文<br />
REQUIRE8 {bool}<br />
PRESERVE8 {bool}<br />
各 引 数 には 以 下 の 意 味 があ り ます。<br />
bool<br />
任 意 でブール 定 数 ({TRUE} または {FALSE}) を 指 定 します。<br />
使 用 法<br />
コードで 8 バイ ト 境 界 で 境 界 調 整 さ れた ス タ ッ ク を 保 持 する 場 合 は、 必 要 に<br />
応 じて、PRESERVE8 を 使 用 してフ ァ イルに PRES8 ビル ド 属 性 を 設 定 し ます。<br />
コードで 8 バイ ト 境 界 で 境 界 調 整 さ れた ス タ ッ ク を 保 持 し ない 場 合 は、<br />
PRESERVE8 {FALSE} を 使 用 して PRES8 ビルド 属 性 が 設 定 されないよ う にします。<br />
注<br />
PRESERVE8 と PRESERVE8 {FALSE} の 両 方 を 省 略 する と、 アセンブラは、 sp を 変 更<br />
する 命 令 を 調 べて、 PRES8 ビル ド 属 性 を 設 定 する かど う かを 決 定 し ます。<br />
PRESERVE8 は 明 示 的 に 指 定 する こ と をお 勧 め し ます。<br />
以 下 の よ う に 警 告 メ ッ セージを イ ネーブルで き ます。<br />
armasm --diag_warning 1546<br />
詳 細 については、 「コマンド 構 文 」 (ページ 3-2) を 参 照 して 下 さい。<br />
警 告 メ ッ セージを イ ネーブルする と 、 以 下 の よ う な 警 告 メ ッ セージが 表 示 さ<br />
れます。<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-103<br />
Non-Confidential
ディレクティブリファレンス<br />
"test.s", line 37: Warning: A1546W: Stack pointer update potentially<br />
breaks 8 byte stack alignment<br />
37 00000044 STMFD sp!,{r2,r3,lr}<br />
例<br />
REQUIRE8<br />
REQUIRE8 {TRUE} ; equivalent to REQUIRE8<br />
REQUIRE8 {FALSE} ; equivalent to absence of REQUIRE8<br />
PRESERVE8 {TRUE} ; equivalent to PRESERVE8<br />
PRESERVE8 {FALSE} ; NOT exactly equivalent to absence of PRESERVE8<br />
7.8.16 ROUT<br />
ROUT デ ィ レ ク テ ィ ブは、 ローカルラベルの 有 効 範 囲 の 境 界 をマー ク し ます<br />
(「ローカルラベル」 (ページ 3-33) を 参 照 )。<br />
構 文<br />
{name} ROUT<br />
各 項 目 には 以 下 の 意 味 があ り ます。<br />
name<br />
有 効 範 囲 に 割 り 当 て る 名 前 を 指 定 し ます。<br />
使 用 法<br />
ROUT デ ィ レ ク テ ィ ブを 使 用 し て、 ローカルラベルの 有 効 範 囲 を 制 限 し ます。<br />
こ れに よ り 、 誤 って 違 う ラベルが 参 照 さ れる のを 簡 単 に 防 ぐ こ と がで き ます。<br />
ローカル ラベルの 有 効 範 囲 内 に ROUT デ ィ レ ク テ ィ ブが 存 在 し ない 場 合 は、<br />
ローカル ラベルの 有 効 範 囲 はエ リ ア 全 体 と な り ます (「AREA」 (ページ 7-81)<br />
を 参 照 )。<br />
正 し い ローカル ラベルへの 参 照 が 行 われる よ う にする には、 name オプシ ョ ン<br />
を 使 用 し ます。 ラベルの 名 前 ま たは ラベルへの 参 照 が、 その 前 の ROUT ディレ<br />
クティブに 指 定 されている 名 前 と 一 致 しない 場 合 は、 アセンブラによってエ<br />
ラーメ ッセージが 生 成 され、 アセンブルに 失 敗 します。<br />
例<br />
; code<br />
routineA ROUT ; ROUT is not necessarily a routine<br />
; code<br />
3routineA ; code ; this label is checked<br />
7-104 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential
ディレクティブリファレンス<br />
; code<br />
BEQ %4routineA ; this reference is checked<br />
; code<br />
BGE %3 ; refers to 3 above, but not checked<br />
; code<br />
4routineA ; code ; this label is checked<br />
; code<br />
otherstuff ROUT<br />
; start of next scope<br />
<strong>ARM</strong> DUI 0204IJ Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. 7-105<br />
Non-Confidential
ディレクティブリファレンス<br />
7-106 Copyright © 2002-2008 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0204IJ<br />
Non-Confidential