対策した制限事項につきましては、下記からご参照ください。
(a) 連続したvolatile変数アクセス void main(void) { *((volatile unsigned char*)0xfffff000); /* (1) */ *((volatile unsigned short*)0xfffff004); /* (2) */ *((volatile unsigned short*)0xfffff004) = 1; /* (3) */ /* (1)、(2)、(3)の順序で参照することを保証 */ } (b) volatileポインタへのキャストを介した構造体メンバ参照 struct st_tmu2 { unsigned int TCOR; unsigned int TCNT; }; #define TMU2 (*(volatile struct st_tmu2 *)0xFFD80020) void time_wait (unsigned long time) { volatile unsigned long tcnt; unsigned long tcnt_copy, time_cnt; time_cnt = time; tcnt_copy = tcnt = TMU2.TCNT; while ((tcnt_copy - tcnt) < time_cnt){ tcnt = TMU2.TCNT; /* ループの中で毎回代入を行うことを保証 */ } }
ユーティリティツールの一つ、スタック解析ツールにデータマージ機能を追加しました。これにより、既に作成済のアセンブリプログラム等のスタックデータと最適化リンケージエディタが生成したスタック情報ファイルのデータを合成できるようになりました。
オプション | 機能 |
---|---|
global_volatile={0|1} | 外部変数のvolatile化 |
opt_range={all|noloop|noblock} | 外部変数最適化範囲指定 |
del_vacant_loop={0|1} | 空ループ削除 |
max_unroll=<数値> | ループ最大展開数の指定 |
infinite_loop={0|1} | 無限ループ前の式削除 |
global_alloc={0|1} | 外部変数のレジスタ割り付け |
struct_alloc={0|1} | 構造体/共用体メンバのレジスタ割り付け |
const_var_propagate={0|1} | const定数伝播 |
const_load={inline|literal} | 定数ロードの命令展開 |
schedule={0|1} | 命令並べ替え |
オプション | 機能 | |
---|---|---|
追加 | map=<ファイル名> | 外部変数アクセス最適化を行う |
gbr={auto|user} | GBR相対アクセス命令、論理演算をコンパイラが自動生成する | |
shift={inline|runtime} | シフト演算をインライン展開/実行時ルーチン呼び出しで行う | |
blockcopy={inline|runtime} | 転送コードをインライン展開/実行時ルーチン呼び出しで行う | |
latin1 | latin1コードをサポート | |
改善 | division=cpu={inline|runtime} | 除算をインライン展開/実行時ルーチン呼び出しで行う |
inline=<数値> | コードが<数値>%増加するまでインライン展開を行う | |
show=tab={4|8} | タブのカラム数を指定 | |
nomessage[=<番号>[,...]] | informationレベルのメッセージ出力の制御 | |
廃止 | nestinline | コンパイラが自動的に判断してインライン展開を行う |
#pragma拡張子 | 機能 | |
---|---|---|
追加 | #pragma entry | エントリ関数の指定 |
#pragma stacksize | スタックサイズの指定 | |
改善 | #pragma interrupt | (sp=symbol+定数)をサポート |
#pragma gbr_base, #pragma gbr_base1 |
gbr=auto指定時は無効となる |
セクションの先頭アドレス、最終アドレスを参照する演算子(_ _sectop、_ _secend)をサポートしました。
機能 | 組込み関数 | |
---|---|---|
追加 | 64bit乗算 | dmuls_h, dmuls_l, dmulu_h, dmulu_l |
SWAP命令、エンディアン変換 | swapb, swapw, end_cnvl | |
LDTLB/NOP命令 | ldtlb, nop |
外部変数初期化時のアドレス初期化に対するキャスト式のエラーを緩和しました。
変数_sbrk_sizeでmalloc確保サイズを、変数_nfilesで入出力ファイル数を指定できるようになりました。