MAEC TOOL NEWS:
MAECT-M3T-NC30WA-021216D
M16C/60, M16C/30, M16C/20, M16C/10シリーズ用Cコンパイラ(アセンブラ・統合化開発環境付き) M3T-NC30WA の使用上の注意事項を連絡します。
- 該当製品
M3T-NC30WA V.5.00 Release 1, V.5.00 Release 2
- 内容
アセンブラマクロ関数を呼び出している関数の最後にrts命令またはexitd命令が生成されない場合があります。
- 発生条件
- 以下の条件をすべて満たす場合に発生します。
- (1) 関数の最終行でアセンブラマクロ関数を呼び出している。
- (2) アセンブラマクロ関数を呼び出している関数は、スタックフレームが構築されない記述になっている。
- (3) 最適化オプション -ORまたは-OSを指定している。
- (4) -genterオプションを指定していない。
- 発生例
---------------------------------------------
static void b(int);
#pragma __ASMMACRO b(R0)
#pragma ASM
_b .macro
mov.w R0,R1
.endm
#pragma ENDASM
void a(void) /* 関数aの最後にrts命令が生成されない*/
{
b(2);
}
---------------------------------------------
- 回避策
- 以下のいずれかの方法で回避してください。
- (1) -genterオプションを指定する。
- (2) アセンブラマクロ関数呼び出し直後にダミーのasm関数を記述する。
[例]
---------------------------------------------
static void b(int);
#pragma __ASMMACRO b(R0);
#pragma ASM
_b .macro
mov.w R0,R1
.endm
#pragma ENDASM
void a(void)
{
b(2);
asm(); /* ダミーasm関数 */
}
---------------------------------------------
- 恒久対策
本内容は、次期バージョンアップ時に改修する予定です。