08.11.2014 Views

RealView Compilation Tools アセンブラガイド - ARM Information Center

RealView Compilation Tools アセンブラガイド - ARM Information Center

RealView Compilation Tools アセンブラガイド - ARM Information Center

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!