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.

<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

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

Saved successfully!

Ooh no, something went wrong!