RENESAS TOOL NEWS 2005年11月16日 : RSO-M3T-NC308WA_2-051116D
M32C/90, M32C/80, M16C/80および M16C/70シリーズ用Cコンパイラパッケージ M3T-NC308WAの使用上の注意事項を連絡します。
- 該当製品
M3T-NC308WA V.5.00 Release 1 ~ V.5.20 Release 02
- 内容
減数が定数の場合に誤ったコードを生成します。
| 2.1 |
|
発生条件
以下の条件をすべて満たす場合に発生することがあります。
| (1) |
|
被減数は定数以外で、かつ型は以下のいずれかである。
- signed short型
- unsigned short型
- signed int型
- unsigned int型
|
| (2) |
|
減数は定数で、その範囲は 0xFF01 ~ 0xFFFF である。 |
|
| 2.2 |
|
発生例
------------------------------------------------------------------------
int array[];
int func(int i)
{
int j
j = array[ i - 0xFFE0 ]; /* 発生条件(1)および(2) */
return j;
}
------------------------------------------------------------------------ |
- 回避策
減算結果をテンポラリ変数に代入し、直後にダミーのasm()関数を挿入してください。
また、減算式をテンポラリ変数に置き換えてください。
例:
------------------------------------------------------------------------
int array[];
int func(void)
{
int j;
int tmp; /* テンポラリ変数 */
tmp = i - 0xFFE0; /* テンポラリ変数に減算結果を代入 */
asm(); /* ダミーのasm()関数 */
j = array[ tmp ]; /* テンポラリ変数を使用 */
return j;
}
------------------------------------------------------------------------
- 恒久対策
次期バージョンで改修する予定です。