• 検索結果がありません。

RL78ファミリ用CコンパイラCA78K0R SADDR領域とCALLT命令の使用

N/A
N/A
Protected

Academic year: 2022

シェア "RL78ファミリ用CコンパイラCA78K0R SADDR領域とCALLT命令の使用"

Copied!
13
0
0

読み込み中.... (全文を見る)

全文

(1)

Rev. 1.00

ツールビジネス本部 ツール技術部 株式会社ルネサス ソリューションズ

2014/6/20

RL78 ファミリ用 C コンパイラ CA78K0R

SADDR 領域と CALLT 命令の使用

(2)

はじめに

本資料は、

CA78K0R C

コンパイラを使用して、

RL78

SADDR

領域と

CALLT

命令を使用したコードを出力する方法について説明します。

 RL78

SADDR

領域と

CALLT

命令を使用することにより、コードサイズの 削減をすることが可能です。

なお、各項目の例に記述された削減量はその例に関するものであり、他に 適用した場合の削減量は個々のケースにより若干異なります。

本資料で記載してある例の出力アセンブラは、ミディアム・モデル、サイズ優 先最適化(

-qx3

)を指定してコンパイルしたものです。その他の最適化(デ フォルトの最適化およびスピード優先最適化など)を指定した場合には、結 果が異なりますので、注意してください。

(3)

 SADDR

領域と

CALLT

命令を使用するには

 C

ソースファイル上での

SADDR

領域の使用

 C

ソースファイル上での

CALLT

命令の使用

変数/関数情報ファイル生成ツールの利用

プログラム解析機能(

CubeSuite+

)の利用

(4)

SADDR 領域と CALLT 命令を使用するには

 SADDR

領域と

CALLT

命令の使用するには次の方法があります。

 C

ソースファイル上で宣言する

– __sreg

宣言

SADDR

領域

– __callt

宣言

CALLT

命令

変数/関数情報ファイル生成ツールを使用する

静的に参照頻度を解析し、参照頻度順に

__sreg

宣言、

__callt

宣言を指 定した変数/関数情報ファイルを作成する

生成したファイルをコンパイル時にオプションで指定する

変数/関数の参照頻度はプログラム解析機能で参照することが可能です。

(5)

C ソースファイル上での SADDR 領域の使用( 1/2 )

使用頻度の高い外部変数および関数内

static

変数は、

__sreg

宣言をして ください。

特に、

1

ビットのビットフィールドは

__sreg

宣言の効果が大きくなる傾向にあ ります。

 __sreg

宣言をすることにより、

saddr

領域に割り当てられ、直接操作する 命令やコードサイズの短い命令でアクセスします。

(例)

 C

ソースプログラム

変更前 変更後

typedef struct {

unsigned char b0:1;

unsigned char b1:1;

unsigned char b2:1;

unsigned char b3:1;

unsigned char b4:1;

unsigned char b5:1;

unsigned char b6:1;

unsigned char b7:1;

} BITF;

BITF data0, data1;

data0.b4 = data1.b1;

typedef struct {

unsigned char b0:1;

unsigned char b1:1;

unsigned char b2:1;

unsigned char b3:1;

unsigned char b4:1;

unsigned char b5:1;

unsigned char b6:1;

unsigned char b7:1;

} BITF;

__sreg BITF data0, data1;

data0.b4 = data1.b1;

(6)

C ソースファイル上での SADDR 領域の使用( 2/2 )

(例)

出力アセンブラ

注意

変数/関数情報ファイルでも

sreg

変数の指定が可能です。

変更前 変更後

movw hl,#loww (_data1) mov1 CY,[hl].1

movw hl,#loww (_data0) mov1 [hl].4,CY

3 2 3 2

mov1 CY,_data1.1 mov1 _data0.4,CY

3

10バイト 6バイト3

(7)

C ソースファイル上での CALLT 命令の使用( 1/2 )

関数呼出し頻度の高い関数は、

__callt

宣言をしてください。

 __callt

宣言をすることにより、

callt

テーブル領域

[ 80H - BFH ]

にコ ールする関数のアドレスを格納し、直接関数をコールするよりも短いコードで 関数をコールすることが可能です。

(例)

 C

ソースプログラム

変更前 変更後

void func_sub(void)

{ ;

} void func()

{ func_sub();

; func_sub();

}

__callt void func_sub(void)

{ ;

} void func()

{ func_sub();

; func_sub();

}

(8)

C ソースファイル上での CALLT 命令の使用( 2/2 )

(例)

出力アセンブラ

注意

呼び出しのための関数のアドレスのテーブルを生成します(

@@CALT

)。

そのため、

1

回しか呼び出されない関数の場合には、コードサイズ削減の効果は ありません。

 CALLT

命令は

CALL

命令よりも実行クロック数は多くなります。

変数/関数情報ファイルでも

callt

宣言の指定が可能です。

変更前 変更後

@@CODEL CSEG _func:

call !!_func_sub call !!_func_sub

4 4

@@CALT CSEG CALLT0

?func_sub: DW _func_sub @@CODEL CSEG

_func:

callt [?func_sub]

callt [?func_sub]

2 2

8バイト 6バイト2

(9)

変数/関数情報ファイル生成ツールの利用( 1/3 )

機能

参照頻度の高い変数を

saddr

領域に割り当てます。

参照頻度の高い関数を

callt

関数にします。

ソース上で指定した修飾子(

__sreg

__callt

)に加えて、変数/関数情報ファ イルで指定した変数を

saddr

領域に割り当て、関数を

callt

関数にします。

使用方法

 CubeSuite+

CA78K0R(

ビルド・ツール

)

のプロパティの

「変数/関数配置オプション」タブで設定してください(次ページ参照)。

注意

この機能をご使用になる前に、ビルドが正常に終了して、

.lmf

が生成されてい ることを確認してください。

(10)

変数/関数情報ファイル生成ツールの利用( 2/3 )

変数/関数情報ファイルを自動で生成する場合

「変数/関数配置オプション」タブ

– →“変数/関数情報を出力する”を“はい”にしてください。

プロジェクトツリーパネルに「プロジェクト名

.vfi

」ファイルが登録されます。

(11)

変数/関数情報ファイル生成ツールの利用( 3/3 )

変数/関数情報ファイルを編集する場合

「変数/関数配置オプション」タブ

– →“変数/関数情報を出力する”を“いいえ”にしてください。

プロジェクトツリーパネルの「プロジェクト名

.vfi

」ファイルをダブルクリックして、エ ディタで編集してください。

注意

 “はい”のままだと、ビルド毎に変数/関数情報ファイルを生成し直します。

(12)

プログラム解析機能( CubeSuite+ )の利用

 CubeSuite+

のプログラム解析機能を使用して、次を実施することによりコ ードサイズが削減される可能性があります。

関数や

const

定数や変数で、使用されていないもの(参照回数が

0

のもの)を 削除してください。

注意:ビルドしてエラーにならないことを確認してください。

 1

回しか参照されていない

static

関数を、関数呼び出しではなく、処理を直接記 述してください。

static関数を表示

参照回数を表示

(13)

参照

関連したドキュメント

水道水又は飲用に適する水の使用、飲用に適する水を使

※ 硬化時 間につ いては 使用材 料によ って異 なるの で使用 材料の 特性を 十分熟 知する こと

7-3.可搬型設備,消火設備 大湊側エリア 常設代替交流電源設備 使用可能・使用不可・不明 1 ガスタービン発電機 ガスタービン発電機用

利用している暖房機器について今冬の使用開始月と使用終了月(見込) 、今冬の使用日 数(見込)

計画 設計 建築 稼働 チューニング 改修..

計画 設計 建築 稼働 チューニング 改修..

第一の場合については︑同院はいわゆる留保付き合憲の手法を使い︑適用領域を限定した︒それに従うと︑将来に

( (再輸出貨物の用途外使用等の届出) )の規定による届出又は同令第 38 条( (再輸 出免税貨物の亡失又は滅却の場合の準用規定)