MESC TOOL NEWS:
MESCT-NC79WA-980701D
NC79WA / NC79
V.2.00 Release 1, V.2.00 Release 2
ご使用上のお願い
|
この度、7900シリーズ用CコンパイラNC79WA / NC79 V.2.00 Release 1およびV.2.00 Release 2のご使用上の注意事項をご連絡致します。
MXフラグの整合性がとれない
- 内 容
for文等の後方分岐を伴う処理に対してMXフラグの整合性がとれない場合があります。
- 発生条件
以下の条件を同時に満たす場合に発生する可能性があります。
- 後方分岐を伴う処理の中に一つ以上の後方分岐を伴う処理が含まれている。
- 後方分岐の処理の範囲内にchar型データとそれ以外の型のデータが含まれている。
- 発生現象
MXフラグのコードが出力されません。
- 発生例
--------------------------------------------------------------------------
[C言語ソース例]
char io;
char pc;
void func(void)
{
char c;
int i;
while( 1 ){
while( 1 ){
i++;
c = io;
if( c != 0 )
break;
}
if( c == 1 ){
while( 1 ){
if( c != 3 )
break;
c = io;
if( c != 0 )
pc = c + 1;
}
}
}
}
--------------------------------------------------------------------------
[生成コード例]
:
:
._line 8
;## # C_SRC : while( 1 ){
L42:
._line 9
;## # C_SRC : while( 1 ){
._line 10
;## # C_SRC : i++;
inc DP0:1 ; i <---------直前にclmが出力されない
._line 11
;## # C_SRC : c = io;
:
:
;## # C_SRC : while( 1 ){
L43:
._line 17
;## # C_SRC : if( c != 3 )
cbneb DP0:3,#03H,L42 ; c
:
:
;## # C_SRC : pc = c + 1;
sem
inc A
stab A,DT+:_pc
bra L43
:
:
- 対応策
本現象が発生した場合には、asm関数を使用してMXフラグを強制的に変更してください。
--------------------------------------------------------------------------
[C言語ソース例]
:
:
if( c == 1 ){
while( 1 ){
if( c != 3 )
break;
c = io;
if( c != 0 )
pc = c + 1;
asm( 0,0 );
}
}
:
:
--------------------------------------------------------------------------
[生成コード例]
:
:
._line 21
;## # C_SRC : pc = c + 1;
sem
inc A
stab A,DT+:_pc
L17:
;## # C_SRC : asm( 0,0 );
;## ASM START
clm
;## ASM END
._line 23
;## # C_SRC : }
bra L9
:
:
32ビットの定数値をfarポインタでキャストできない
- 内 容
32ビットサイズの定数値をfarのポインタをキャストすると上位16ビットが失われます。
- 発生条件
以下の条件を同時に満たす場合に発生します。
- 32ビットサイズの定数値を使用する。
- 上記定数をfar型のポインタにキャストする。
- 発生現象
32ビット定数値の下位16ビットのみを使用し、上位16ビットが0として処理されます。
- 発生例
--------------------------------------------------------------------------
[C言語ソース例]
char i;
void func(void)
{
i = *(char far *)0x123456;
}
--------------------------------------------------------------------------
[生成コード例]
;## # C_SRC : i = *(char far *)0x123456;
ldab A,LG:03456H <--------上位を0として処理
stab A,DT+:_i
- 対応策
定数値をキャストする代わりに#pragma ADDRESSを使用してください。
--------------------------------------------------------------------------
[C言語ソース例]
#pragma ADDRESS j 123456h
char far j;
char i;
void func(void)
{
i = j;
}
--------------------------------------------------------------------------
[生成コード例]
_j .equ 123456h
:
:
;## # C_SRC : i = j;
ldab A,LG:_j
stab A,DT+:_i
環境変数が設定されない
- 内 容
NC79で使用する環境変数が正しく設定されません。
- 発生条件
Windows 95対応版で発生します。
- 発生現象
NC79で使用する環境変数BIN79、LIB79、およびTMP79がそれぞれBIN30、LIB30、およびTMP30に設定されるため、NC79が起動できません。
--------------------------------------------------------------------------
[AUTOEXEC.BAT ファイル]
:
:
REM ***** NC79 用 環境変数 *****
SET BIN30=C:\MTOOL\BIN30
SET LIB30=C:\MTOOL\LIB30
SET INC79=C:\MTOOL\INC79
SET TMP30=C:\MTOOL\TMP
:
:
- 対応策
AUTOEXEC.BATファイルの内容を次のように修正してください。
--------------------------------------------------------------------------
[AUTOEXEC.BAT ファイル]
:
:
REM ***** NC79 用 環境変数 *****
SET BIN79=C:\MTOOL\BIN79
SET LIB79=C:\MTOOL\LIB79
SET INC79=C:\MTOOL\INC79
SET TMP79=C:\MTOOL\TMP
:
: