[#9581] SIGFPE isn't raised on FreeBSD 4.0 — gotoken@... (GOTO Kentaro)

ごとけんです

18 messages 2000/04/18
[#9582] Re: SIGFPE isn't raised on FreeBSD 4.0 — ARIMA Yasuhiro <fit0298@...> 2000/04/18

有馬です。

[#9583] Re: SIGFPE isn't raised on FreeBSD 4.0 — EGUCHI Osamu <eguchi@...> 2000/04/18

えぐち@エスアンドイー です。

[ruby-dev:9583] Re: SIGFPE isn't raised on FreeBSD 4.0

From: EGUCHI Osamu <eguchi@...>
Date: 2000-04-18 05:10:13 UTC
List: ruby-dev #9583
えぐち@エスアンドイー です。

>>> In message [ruby-dev:9582] Re: SIGFPE isn't raised on FreeBSD 4.0
    On Tue, 18 Apr 2000 13:49:52 +0900, ARIMA Yasuhiro <fit0298@fitec.co.jp> said:

> 有馬です。
> 
> gotoken@math.sci.hokudai.ac.jp (GOTO Kentaro) wrote
> 
> | numeric.c には FreeBSD で SIGFPE を起こさないための ifdef が
> | 入ってます.まぁ現状でも問題は無いですが,FreeBSD 4.0 で
> | fpsetmask() するのは無駄であることは確かです.しかし FreeBSD 
> | のバージョンによって ifdef するのもまた煩わしいですね.どう
> | しますか??
> 
> FreeBSD のしくみとしては、以下のように括ればよいはずです。
> まだ 3.x が主流なので Ruby 側で対処してもらえるとありがたいです。

同感です。
が、、、

>   #if __FreeBSD_version < 400012
>   #  include <floatingpoint.h>
>   #endif
> 
>   #if __FreeBSD_version < 400012
>       /* allow divide by zero -- Inf */
>       fpsetmask(fpgetmask() & ~(FP_X_DZ|FP_X_INV|FP_X_OFL));
>   #endif
> 
> 上記の数値は fpsetmask 対処のタイミングとしては正確でないと思いますが、
> これから 4.x 系を使いはじめる方にも、これまで通り 3.x 系を使う方にも
> 問題ない指定だと考えます。いかがでしょうか?

FreeBSD 以外のプラットホームのために、、

#if defined __FreeBSD_version && __FreeBSD_version < 400012

である必要がありますね。

あと有馬さん自身言及されていますが、 400012 とは
タイミングがずれるのが難点ですね。

configure で対応すべきでしょうか?

	えぐち

In This Thread