12.07.2015 Views

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

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

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

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

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

コーディング 慣 行fact が __pure として 修 飾 されています。コンパイラは fact(n) + fact(n) の 追 加時 に CSE を 実 行 する こ と に 成 功 し てい る ので、 fact は 1 度 しか 呼 び 出 されません。純 関 数 は、 定 義 上 、 副 作 用 を 伴 う こ と はで き ません。 例 えば、 グローバル 状態 にア ク セ スする と 、 同 じ パ ラ メ ータ を 使 用 し て 関 数 が 2 回 呼 び 出 さ れた 場合 に 同 じ 値 を 返 す 必 要 があ る と い う 規 則 に 違 反 する 可 能 性 があ り ます。 そのため、 純 関 数 は、 グ ローバル 変 数 の 使 用 ま たはポ イ ン タ 経 由 の 間 接 指 定 によって、 グローバル 状 態 を 読 み 出 した り、 書 き 込 んだりする こ とができません。 したがって、 プログラムで __pure を 使 用 する 際 は 注 意 が 必 要 です。 しかし、 関 数 を __pure と し て 宣 言 で き る 場 合 は、 コ ンパ イ ラ に よ っ て CSE などの強 力 な 最 適 化 が 実 行 さ れる こ と が 少 な く あ り ません。純 関 数 の 詳 細 については、 『コンパイ ラ リ ファレンスガイ ド』 の 「__pure」(ページ 4-15) を 参 照 して 下 さい。5.3.4 <strong>ARM</strong> 関 数 修 飾 子 の 配 置関 数 の 動 作 ま たは 呼 び 出 し シーケン ス を 変 更 する <strong>ARM</strong> キーワード 拡 張 は 多数 あ り ます。 例 えば、 __pure、 __irq、 __swi、 __swi_indirect、 __softfp、__value_in_regs は、 いずれも 関 数 の 動 作 や 呼 び 出 し シーケン ス を 変 更 し ます。こ れら 関 数 修 飾 子 の 構 文 は、 すべて 共 通 です。 __pure な どの 関 数 修 飾 子 は、 以下 のいずれかの 場 所 で 関 数 宣 言 を 修 飾 で き ます。• 関 数 宣 言 の 前 。 以 下 に 例 を 示 し ます。__pure int foo(int);• パラ メータ リ ス トの 閉 じ 括 弧 の 後 。 以 下 に 例 を 示 し ます。int foo(int) __pure;単 純 な 関 数 宣 言 の 場 合 、 各 構 文 はあいまいではあ り ません。 ただし、 戻 り 値の 型 ま たは 引 数 が 関 数 ポ イ ン タ であ る 関 数 の 場 合 は、 前 置 構 文 があいまいになります。 例 えば、 次 の 関 数 は 関 数 ポイ ンタを 返 し ますが、 __pure によって 関数 自 体 が 修 飾 されるのか、 返 されるポインタの 型 が 修 飾 されるのかは 明 白 でありません。__pure int (*foo(int)) (int); /* declares 'foo' as a (pure?) function thatreturns a pointer to a (pure?) function.It is ambiguous which of the two functiontypes is pure. */実 際 、 foo の 宣 言 の 前 にあ る 単 一 の __pure キーワードは、 foo そのものだけでなく、foo によって 返 される 関 数 ポインタの 型 も 修 飾 しています。5-18 Copyright © 2002-2010 <strong>ARM</strong> Limited. All rights reserved. <strong>ARM</strong> DUI 0205IJNon-Confidential, ID 100419

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

Saved successfully!

Ooh no, something went wrong!