こんばんは、まつぞの です。
H8/3048F-ONE を GCCを使って開発しています。
日立のヘッダファイルも使っているのですが、gcc のアドレッシングモードに
ついて教えてください。
--------------------------------------------
#include "3048f.h" // from HITACHI
int main(void){
ITU1.GRA = 0;
return 0;
}
---------------------------------------------
というソースをコンパイルすると以下のような warning がでます。
$ h8300-hms-gcc -mh -save-temps int_timer.c
int_timer.s: Assembler messages:
int_timer.s:13: Warning: operand @0xffff74 out of range.
アセンブラの警告なので、アセンブラソースを見てみました。
_main:
10 push.l er6
11 mov.l er7,er6
12 sub.w r2,r2
13 mov.w r2,@16777076:16 <---- ここ!
14 sub.w r0,r0
15 pop.l er6
16 rts
@16777076:16 が @16777076:8 ならば warning がでないと思うのですが、
どうすればそのような制御ができるでしょうか?
# なぜそう思うかというと、ITU1.TCR.BYTE,ITU1.TIER.BYTE などに
# アクセスするコードが :8 となっており、warning が出ているのは
# 上記の :16 のところだけだからです
コンパイラオプションに -Wl,-relax を指定してみたのですが、変化は
ありませんでした。
どなたか対処法をご存じの方がいらっしゃれば、教えていただけると幸いです。
CPU:H8/3048BF(YellowSoft YH3048-3)
compiler: h8300-hms-gcc 3.0.3