[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[pbsd-mg2] Re: successful self make build



鈴木(康)です。
<199909021032.TAA10085@shin1.sm.sony.co.jp>の記事において
takemura@sm.sony.co.jpさんは書きました。

  | 
  | 脊椎なコメントを続けてしまいますが...
  | 
  |  >   | とはいえ、互換性がないのは、ライブラリの setjmp などに load/store 
  |  >   | 命令がすこし入っているという点だけなのですよね?
  |  > 
  |  > lib/arch/mips を見てもらえばわかりますが、
  |  > 
  |  > flt_rounds.c:   __asm__("cfc1 %0,$31" : "=r" (x));
  |  > fpgetmask.c:    __asm__("cfc1 %0,$31" : "=r" (x));
  |  > fpgetround.c:   __asm__("cfc1 %0,$31" : "=r" (x));
  |  > fpgetsticky.c:  __asm__("cfc1 %0,$31" : "=r" (x));
  |  > fpsetmask.c:    __asm__("cfc1 %0,$31" : "=r" (old));
  |  > fpsetmask.c:    __asm__("ctc1 %0,$31" : : "r" (new));
  |  > fpsetround.c:   __asm__("cfc1 %0,$31" : "=r" (old));
  |  > fpsetround.c:   __asm__("ctc1 %0,$31" : : "r" (new));
  |  > fpsetsticky.c:  __asm__("cfc1 %0,$31" : "=r" (old));
  |  > fpsetsticky.c:  __asm__("ctc1 %0,$31" : : "r" (new));
  |  > 
  |  > は、全部だめです。こちらは、cfc1 を無視でいいのかも知れません。
  |  >
  |  > あと、fabs.S isinf.S ldexp.S modf.S
  |  > もダメです。こっちの方の方が対応が難しいと思う。
  | 
  | むむ。やはり hpcmips local な問題にはできないですか。
  | これって結局、-msoft-float がハンパ、ってことですね。

そう思います。
( もしくは、NetBSD の libc と相性が悪い)

  |   1. kernel で浮動小数点エミュレーション

これをやっても、-msoft-float がハンパな点が残ります。
soft-float だと、スカラレジスタでパラメータの受渡しをしますが、
modf.S などは、float レジスタを使ってしまいます。

  |   2. -msoft-float をつけた際には、浮動小数点命令は一切入らない
  | 実行バイナリが
  |      できるように gcc を改良
  |      (MS のコンパイラ製品のように -msoft-float をつけると 
  | libc.a のかわりに
  |        libc_soft-float.aがリンクされるとか)

これって NetBSD の libc の構成を変えるので、パワーいりますよね。

2.1 libc のスタートアップで、ある変数に MACHINE_ARCH を元にした値をセット。
float 関係のライブラリで実行時切り分け。

という解決策もあるかも知れません。

これだとライブラリで、vr4100 の命令を使ったり応用がききますが、
私は、3 の方がいいと思います。

  |   3. クロスコンパイル環境を mipssfel-netbsd と mipsel-netbsd にわける
  |      (mipssfel の際には lib のコンパイル時に -DWITHOUT_FPU がつくとか)

sparc64 とか、mipseb とかは、同じソース tree に入っているので、
mipssfel でもいいじゃないかと思います。

# ところで、mipssf ってなし? ( sparc32 とか言いませんからこれもあり
# かと)

  | のどれかしかないのでしょうか。
  | 
  |   4. とりあず coprocesser 1(FPU)の laod/store 命令は無視、fabs() など
  |      が呼ばれたら illigal instruction で process が死亡

これだと、printf で fabs とか使っていると思うので、最初から ps とか
をあきらめることになりそうです。

  | 4. が暫定策にしかならないのなら、やっぱり 3. が一番簡単そうです。

2.1 も簡単といえば簡単かも。でも 3 がいいな。

ちなみに、ce では、sh3 と sh4 は別なのは当然として、
mips と 別に float アリの mips があるそうです。

--
					鈴木 康司 @NEC
					suz@hpc.bs1.fc.nec.co.jp
					TEL 0423-33-5381