12.07.2015 Views

RealView Compilation Tools コンパイラユーザガイド - ARM ...

RealView Compilation Tools コンパイラユーザガイド - ARM ...

RealView Compilation Tools コンパイラユーザガイド - ARM ...

SHOW MORE
SHOW LESS
  • No tags were found...

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

イ ン ラ イ ンアセン ブ ラ と 組 み 込 みアセン ブ ラの 使 用pc (r15)、 lr (r14)、 sp (r13) のレジスタにはアクセスできません。 これらのレジス タへのア ク セスが 試 行 される と、 エラー メ ッ セージが 生 成 されます。仮 想 レ ジ ス タ の 初 期 値 は 定 義 さ れていません。 したがって、 仮 想 レジスタを読 み 出 すには、 その 前 に 書 き 込 みを 行 う 必 要 があ り ます。 コードによって 仮想 レジス タへの 書 き 込 みの 前 に 読 み 出 しが 行 われる と 、 コ ンパイ ラによ り 警告 が 生 成 さ れます。 また、 インラインアセンブリ コードの 最 初 で 物 理 レジスタ 内 の 特 定 の 値 に 依 存 する 従 来 のコード について も、 コ ンパイ ラは 同 様 の 警告 を 生 成 します。 以 下 に 例 を 示 し ます。int add(int i, int j){int res;__asm{ADD res, r0, r1}return res;}// relies on i passed in r0 and j passed in r1上 記 の コー ド を 実 行 する と 、 警 告 と エ ラー メ ッ セージが 表 示 さ れます。これらのエラーの 原 因 は、 仮 想 レジスタ r0 および r1 が 書 き 込 み 前 に 読 み 出 されるためです。 また、 これらの 警 告 の 原 因 は、r0 および r1 が C または C++ の変 数 と し て 定 義 さ れる 必 要 があ る ためです。 正 しいコードを 以 下 に 示 します。int add(int i, int j){int res;__asm{ADD res, i, j}return res;}命 令 の 展 開コンパイラのインラインアセンブラは、LDM、 STM、 LDRD、 STRD の 各 命 令 を、 同じ 機 能 を 実 行 する 単 一 レ ジ ス タ メ モ リ 演 算 命 令 のシーケ ン スに 展 開 し ます。単 一 レ ジ ス タ メ モ リ 演 算 命 令 のシーケン ス を 多 重 レ ジ ス タ メ モ リ 演 算 命 令 に戻 し て 最 適 化 する 場 合 があ り ます。<strong>ARM</strong> DUI 0205IJ Copyright © 2002-2010 <strong>ARM</strong> Limited. All rights reserved. 7-17ID 100419Non-Confidential,

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

Saved successfully!

Ooh no, something went wrong!