(toppers-users 2595) Sh4 FPUの使用方法を教えて下さいその2。

EIKO SOKKI MATSUMOTO-F eikomf @ peace.ocn.ne.jp
2007年 4月 9日 (月) 11:41:45 JST


関と申します。
尾形様、もなか様、酒匂様、回答をいただき誠にありがとうございました。
こちらでアドバイスにしたがって、新しく開発環境を作ってみました。
開発環境の構築に時間がかかってしまい、皆様にお礼を述べるのが遅れてしまいました。 


開発環境は、Cygwin(1.5.24-2)上に、
binutils-2.16.1.tar.gz
gcc-core-3.4.6.tar.gz
newlib-1.14.0.tar.gz 
これらのファイルをダウンロードして構築しました。
binutilsの構築とインストール
/usr/src/binuitls-2.16.1で次のコマンドを実行します。
$ ../binutils-2.16.1/configure --target=sh-hitachi-elf --prefix=/usr/local
$ make
$ make install
gccの構築とインストール
$ ../gcc-3.4.6/configure --target=sh-hitachi-elf --prefix=/usr/local \
> --disable-nls --enable-languages=c --with-newlib \
$ make
$ make install
newlibの構築とインストール
$ 
../newlib-1.14.0/configure --target=sh-hitachi-elf --prefix=/usr/local --disable-nls
$ make
$ make install

構築の途中ではエラーが発生しなかった(と思う)ので、
jsp-1.4.2をインストールして、これもエラーはでなくなしました。
次にPartner(京都マイクロコンピュータのデバッガ)でプログラムを走らせましたところ次の部分で永久ループに
なっていました。
__kernel_print_banner+22()
:
static void
convert(unsigned _intptr_ val, unsigned int radix, const char *radchar,
                int width, int minus, int padzero, void (*putc)(char))
{
        char    buf[CONVERT_BUFLEN];
        int     i, j;

        i = 0;
        do {            ----------------ここでループしている
                buf[i++] = radchar[val % radix];
                val /= radix;
        } while (val != 0);
:
:
:

この関数が呼ばれている。(浮動少数点の計算が行われている)
___udivsi3_i4:
0000A9C4 E101        MOV     #h'1,r1
0000A9C6 3516        CMP/HI  r1,r5
0000A9C8 8B0E        BF      h'0A9E8
0000A9CA 4105        ROTR    r1
0000A9CC 241A        XOR     r1,r4
0000A9CE 445A        LDS     r4,fpul
0000A9D0 C706        MOVA    @(h'0A9EC,pc),r0
0000A9D2 F409        FMOV.S  @r0+,fr4
0000A9D4 F508        FMOV.S  @r0,fr5
0000A9D6 F02D        FLOAT   fpul,fr0
0000A9D8 251A        XOR     r1,r5
0000A9DA 455A        LDS     r5,fpul
0000A9DC F22D        FLOAT   fpul,fr2
0000A9DE F040        FADD    fr4,fr0
0000A9E0 F240        FADD    fr4,fr2
0000A9E2 F023        FDIV    fr2,fr0
0000A9E4 000B        RTS
0000A9E6 F03D        FTRC    fr0,fpul
0000A9E8 000B        RTS


On 2007/04/04, at 14:02, Naohide Ogata wrote:
>  gccの場合、「-m4」を指定すると整数の除算も浮動小数点で行うコードを出力
> します。こちらでは、 jsp/config/sh3/cpu_support.Sのレジスタ保存、復帰の
> 部分にfpscr、fpul、fr0〜fr15の保存、復帰を追加して使用しています。


ここで質問ですが、jsp/config/sh3/cpu_support.Sのレジスタの保存、復帰の部分
とありますが、 cpu_support.S には、次の4箇所の部分があります。
この全ての部分で浮動少数点レジスタ関係の保存、復帰を行えば良いのでしょうか?


----cpu_support.S--------------
/*  Exception 100 vector 部 */

/* タスクディスパッチャ部 */

/* 割り込みハンドラ/CPU例外ハンドラ出口処理部 */

/* タスク起動処理部 */

/*  Exception 600 vector 部 */

以上
お手数かとは思いますが、なにとぞよろしくお願い致します。