
|
 |
MAEC TOOL NEWS:
MAECT-NC308WA-010916D
NC308WA, NC30WA, AS308, AS30
ご使用上のお願い
|
M16Cファミリ用Cコンパイラ (アセンブラ・統合化開発環境付き) NC308WA, NC30WA およびアセンブラAS308, AS30の使用上の注意事項を連絡します。
- 該当製品
| M16C/80シリーズ用Cコンパイラ | : NC308WA V.1.00 Release 1 ~ V.3.10 Release 3 |
| M16C/60, M16C/20シリーズ用Cコンパイラ | : NC30WA V.1.00 Release 1 ~ V.4.00 Release 2 |
|
| M16C/80シリーズ用アセンブラ | : AS308 V.1.00 Release 1 ~ V.2.00 Release 1 |
| M16C/60, M16C/20シリーズ用アセンブラ | : AS30 V.1.00 Release 1 ~ V.3.20 Release 1 |
- 内容
アセンブラで分岐命令の最適化をおこなうと、無条件分岐命令 (JMP) に対して分岐距離のエラーである "Value is out of range" が出力される場合があります。
- 発生条件
- 以下3点の条件をすべて満たす場合に発生します。
- (1) 最適化の結果の1つとして、連続する2つの無条件分岐命令に対して "JMP.S" 命令が出力されている。
- (2) 2つ目の無条件分岐命令と分岐先の間に指示命令 ".ALIGN" が記述されており偶数番地に補正されている。
- (3) 偶数番地に補正された結果、2つ目の無条件分岐命令の分岐距離が "プログラムカウンタ(PC)+10" 番地になっている。
- 発生例
ソースファイルがアセンブラ言語記述の場合
------------------------------------------------------------------------
.section prg,code,align
jmp label1
.byte 1,2,3,4
label1:
.byte 1,2,3
jmp label2 ;この行が分岐距離のエラーになる。
.byte 1,2,3,4
.byte 1,2,3,4
.align ;条件(2) 偶数番地に補正されている。
label2: ;条件(3)
.end
------------------------------------------------------------------------
- 回避策
分岐距離のエラーとなった無条件分岐命令に対して、ショートジャンプ (JMP.S) 命令生成制御指示命令 ".SJMP" を記述してショートジャンプ命令の生成を抑止してください。
- 5.1 ソースファイルがアセンブラ言語記述の場合
-----------------------------------------------------------------------
.section prg,code,align
jmp label1
.byte 1,2,3,4
label1:
.byte 1,2,3
.sjmp off ; JMP.S 命令の生成抑止
jmp label2
.sjmp on ; JMP.S 命令の生成許可
.byte 1,2,3,4
.byte 1,2,3,4
.align
label2:
.end
-----------------------------------------------------------------------
- 5.2 ソースファイルがC言語記述の場合
-----------------------------------------------------------------------
* if~elseなどの条件式内で分岐距離のエラーが発生した場合
func( )
{
asm(" .sjmp off "); /* JMP.S 命令の生成抑止 */
if(xxxxx)
......
else
.......
asm(" .sjmp on "); /* JMP.S 命令の生成許可 */
}
-----------------------------------------------------------------------
- 恒久対策
次期バージョンアップ時に改修する予定です。
|