Renesas Synergy™

FAQ 106456 : tiny_funcの使用方法について教えてください。

tiny_funcはROMサイズを縮小する機能のひとつです。
4箇所以上の場所から呼び出される関数をtiny_funcで宣言することにより、 ROMサイズを縮小できます。
2箇所以下の場所から呼び出される関数をtiny_funcで宣言するとROMサイズは 増えます。

tiny_funcを用いた場合のプログラムは以下のようになります。


------------------------------
tiny_func void func_t(void);
void func1( void )
{
func_t();
}
------------------------------

上記func_t();に対してICC740は以下のコードを生成します。


------------------------------
JSR \REFFNT func_t ; スペシャルページ・アドレッシング
------------------------------

これは、リンク時に以下のコードとなります。
以下では、func_t()が0xff00の先頭番地に配置された場合の例です。


CODEセグメント:
------------------------------
JSR \00 ; 2バイト命令です。
; JSR \REFFNT func_tのリンク結果です。
------------------------------


C_FNTセグメント:(0xff00に配置)
------------------------------
JSR func_t ; 3バイト命令です。
------------------------------

この結果、tiny_funcで宣言された関数コールの合計サイズは以下のとおりです。


2箇所: 2 × 2 bytes + 3 bytes = 7 bytes
3箇所: 3 × 2 bytes + 3 bytes = 9 bytes
4箇所: 4 × 2 bytes + 3 bytes = 11 bytes

通常の関数コールの合計サイズは以下のとおりです。


2箇所: 2 × 3 bytes = 6 bytes
3箇所: 3 × 3 bytes = 9 bytes
4箇所: 4 × 3 bytes = 12 bytes

Tiny_func宣言がある場合と無い場合では、4箇所以上から関数コールをしている 場合にコードサイズが小さくなります。
但し、2回のJSRを実行しますので、実行速度は遅くなります。

適用製品

740ファミリ用Cコンパイラパッケージ [M3T-ICC740]
他にご質問がございましたら、リクエストを送信してください