At Sun, 09 Dec 2001 02:36:14 +0900, (^o^) Masahiro Ochiai <user@xxxxxxxxxxxxx> wrote: > > > 早速のパッチ有り難うございます。 > > 私の2.95.2に当ててみましたが、どうも想定通りのコードが出力されませんでした。 > > やっぱり、 > > mov.l @(8,er6),er0 > > となってしまうようです。私の環境がきちんと入れ替わっていない可能性がありますので、 > > もうちょっと調べてみます。下記のソールをコンパイルしてどうなるか教えていただけると助かります。 > -mint32を付けていなかったなーと思いつつ試してみました・・・変ですね。 これを↓試してください。 ------------------------------------------------------------------------------------ diff -ru gcc-2.95.3/gcc/config/h8300/h8300.c gcc-2.95.3.new/gcc/config/h8300/h8300.c --- gcc-2.95.3/gcc/config/h8300/h8300.c Thu Jan 25 23:03:29 2001 +++ gcc-2.95.3.new/gcc/config/h8300/h8300.c Mon Dec 10 14:37:00 2001 @@ -1588,6 +1588,8 @@ if (from == ARG_POINTER_REGNUM && to == STACK_POINTER_REGNUM) offset += UNITS_PER_WORD; /* Skip saved PC */ } + if ((TARGET_H8300H || TARGET_H8300S) && TARGET_MODE) + offset -= 2; return offset; } diff -ru gcc-2.95.3/gcc/config/h8300/h8300.h gcc-2.95.3.new/gcc/config/h8300/h8300.h --- gcc-2.95.3/gcc/config/h8300/h8300.h Mon Mar 22 09:08:28 1999 +++ gcc-2.95.3.new/gcc/config/h8300/h8300.h Mon Dec 10 14:37:24 2001 @@ -91,6 +91,8 @@ alignment. */ #define TARGET_ALIGN_300 (target_flags & 8192) +#define TARGET_MODE (target_flags & 16384) + /* Macro to define tables used to set the flags. This is a list in braces of pairs in braces, each pair being { "NAME", VALUE } @@ -110,6 +112,7 @@ {"h", 4096, "Generate H8/300H code"}, \ {"no-h", -4096, "Do not generate H8/300H code"}, \ {"align-300", 8192, "Use H8/300 alignment rules"}, \ + {"n", 16384, "Normal Mode Stackframe"}, \ { "", TARGET_DEFAULT, NULL}} /* Do things that must be done once at start up. */ diff -ru gcc-2.95.3/gcc/config/h8300/t-h8300 gcc-2.95.3.new/gcc/config/h8300/t-h8300 --- gcc-2.95.3/gcc/config/h8300/t-h8300 Thu Dec 17 06:02:56 1998 +++ gcc-2.95.3.new/gcc/config/h8300/t-h8300 Sun Dec 9 16:12:22 2001 @@ -18,8 +18,8 @@ echo '#endif' >> fp-bit.c cat $(srcdir)/config/fp-bit.c >> fp-bit.c -MULTILIB_OPTIONS = mh/ms mint32 -MULTILIB_DIRNAMES = h8300h h8300s int32 +MULTILIB_OPTIONS = mh/ms mn mint32 +MULTILIB_DIRNAMES = h8300h h8300s normal int32 MULTILIB_EXCEPTIONS = mint32 LIBGCC = stmp-multilib ------------------------------------------------------------------------------------ テストプログラムのコンパイル結果は、 h8300-hitachi-hms-gcc -mh -mn -mint32 -O -S 1.c _aaa: push.l er6 mov.l er7,er6 push.l er4 mov.l @(6,er6),er0 mov.l @(10,er6),er4 jsr @_bbb mov.l er4,er0 jsr @_bbb pop.l er4 pop.l er6 rts になります。 2.95.3のパッチですが、CVSでソースを確認した限りは、2.95.2でも同じなの で、これでOKだと思います。 -- 佐藤 嘉則 <qzb04471@xxxxxxxxxxx>