A.1.1.2 EP相対アクセス

EP(エレメント・ポインタ)と,sld/sst命令,またはld/st命令によってアクセスできるセクションに変数を配置することによりコード・サイズを削減することができます。以下のいずれかの方法により,EP相対でアクセスするセクションに変数を配置させることができます。

(1)

-Omap/-Osmapオプション指定

外部変数アクセス最適化を行います。最適化リンケージエディタが生成する外部シンボル割り付け情報を元に,アクセス頻度の高い外部変数に対してEP相対アクセスするコードを出力します。

(2)

#pragma section指令

変数の定義/ 参照時は,#pragma section指令を使用し,属性指定文字にep_disp4/ep_disp5/ep_disp7/ep_disp8/ep_disp16/ep_disp23/ep_auto のいずれかを指定します。

注意

ep_disp32には,コード・サイズを削減する効果はありません。

#pragma section 属性指定文字
変数宣言/定義
#pragma section default

 

例 1.

EP相対で2バイトのロード/ストア命令によりアクセスする場合

#pragma section ep_disp4
int a = 1;              /*.tdata4 セクションに配置する*/
int b;                  /*.tbss4セクションに配置する*/
#pragma section default

 

属性指定文字として,ep_disp5/ep_disp7/ep_disp8を指定しても同様のアクセスとなります。

 

例 2.

EP相対で4バイトのロード/ストア命令によりアクセスする場合

#pragma section ep_disp16
int a = 1;              /*.edata セクションに配置する*/
int b;                  /*.ebssセクションに配置する*/
#pragma section default

 

例 3.

EP相対で6バイトのロード/ストア命令によりアクセスする場合

#pragma section ep_disp23
int a = 1;              /*.edata23 セクションに配置する*/
int b;                  /*.ebss23セクションに配置する*/
#pragma section default