えぐち@エスアンドイー です。 >>> In message [ruby-list:19506] Re: build on alpha On Wed, 15 Dec 1999 01:24:23 +0900, tokoma / sco.bekkoame.ne.jp (中川 誠) said: tokoma> 中川です。 tokoma> # 能力では貢献できそうもないので、属性で勝負。 おかげさまで、64 Bit CPU での完成度も、格段に上がったと思います。 tokoma> ところで、何故 gcc では現象が起きないのでしょう。 たぶん gcc では cc の -taso 相当が、ディフォルトなのでは? #根拠希薄 ^^;; 反対に -taso なしの cc では、ヒープを 4G 越に置くようです。 この副作用で、int からポインタの変換のバグが発見できたわけで、 バグ再現には適した環境ですね。(^^) tokoma> gcc 自身は 64bit 化されていないということなのでしょうか。 % ruby -ve 'p 0.size' ruby 1.5.0 (1999-12-14) [i386-freebsd3.4] 4 が 4 でなく 8 を返したら、 long は 8 バイトですので、 「64bit 化されている」と考えていいでしょう。 ところで、ちょっと 64bit 化 による恩恵について考えましたが、 演算単位が倍になるので Bignum が速くなりそうな気がします。 しかし、調べてみたら typedef unsigned short USHORT; に固定でしたので、現状は貢献していないようです。 末尾のパッチを当てて、make test してみてください。 えぐち
Index: bignum.c =================================================================== RCS file: /usr/home/eguchi/cvs.netlab.co.jp/ruby/bignum.c,v retrieving revision 1.4 diff -d -u -r1.4 bignum.c --- bignum.c 1999/12/06 09:03:49 1.4 +++ bignum.c 1999/12/15 01:53:09 @@ -13,7 +13,13 @@ #include <ctype.h> VALUE rb_cBignum; +#if SIZEOF_LONG == SIZEOF_SHORT * 2 typedef unsigned short USHORT; +#elif SIZEOF_LONG == SIZEOF_INT * 2 +typedef unsigned int USHORT; +#else +typedef unsigned char USHORT; +#endif #define BDIGITS(x) RBIGNUM(x)->digits #define BITSPERDIG (sizeof(short)*CHAR_BIT)