[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
Re: [MD:7362] Re: 整数のビット数
- X-ml-count: 7372
- Subject: Re: [MD:7362] Re: 整数のビット数
- From: "M.Fujii" <boochang@xxxxxxxxxxxx>
- Date: Fri, 14 Jul 2006 18:59:52 +0900 (JST)
- X-mailer: Mew version 4.2 on Emacs 22.0.50 / Mule 5.0 (SAKAKI)
藤井です。
From: Hideyuki SHIRAI (白井秀行) <shirai@xxxxxxxxxxx>
Subject: Re: [MD:7362] Re: 整数のビット数
Date: Fri, 14 Jul 2006 18:18:43 +0900 (JST)
> > compilerで変わる理由はわかった。
>
> # よくわかるなぁ。。。
>
> > gcc の場合は lisp.h:372 の
> > #define XINT(a) (((EMACS_INT) (a)) >> GCTYPEBITS)
> > が使われるけど、msvc の場合は lisp.h:406の
> > #define XINT(a) ((((EMACS_INT) (a)) << (BITS_PER_EMACS_INT - VALBITS)) \
> > >> (BITS_PER_EMACS_INT - VALBITS))
> > が使われるからですね。
> > 前者はVALBITSによらないけど、後者はVALBITSが少ないと最上位ビットが
> > つぶされてしまう。なので、msvcでは28bitになってしまう。
> >
> > なのでやはりVALBITSの定義が正しくないことが根本原因ですね。
>
> ということは、cygwin で実績があるから portable dumper とかは大丈
> 夫ということですな。じゃ、今のうちに
Cygwin 版と MSVC 版では Lisp_Object の内部構造が全く異なるので、Cygwin
版での動作実績は全く参考にならないと考えてください。
また、Cygwin 版で整数のビット幅を 29bit にするためには portable dumper
周りもかなり手を入れています。(整数のビット幅を 29bit にするためにやっ
た訳ではありませんが...)
済みませんが、以下の変更は MSVC の時だけ有効になるようにしていただけな
いでしょうか?お願いします。
> > > meadow:
> > > #define VALBITS (BITS_PER_EMACS_INT - (GCTYPEBITS + 1))
> > > => 32-(3+1) == 28bits
> >
> > #define ARRAY_MARK_FLAG ((EMACS_INT) ((EMACS_UINT) 1 << (VALBITS + GCTYPEBITS - 2)))
>
> > > emacs:
> > > #define VALBITS (BITS_PER_EMACS_INT - GCTYPEBITS)
> > > => 32-3 == 29bits
> >
> > #define ARRAY_MARK_FLAG ((EMACS_INT) ((EMACS_UINT) 1 << (VALBITS + GCTYPEBITS - 1)))
>
> これらを直しちゃいますね。
>
> # なにか問題があるなら revert してくれ、ということで。
--
藤井 正行 / Masayuki FUJII