[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