[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]
Re: [MD:7362] Re: 整数のビット数
- X-ml-count: 7371
- Subject: Re: [MD:7362] Re: 整数のビット数
- From: Hideyuki SHIRAI (白井秀行) <shirai@xxxxxxxxxxx>
- Date: Fri, 14 Jul 2006 18:18:43 +0900 (JST)
- X-mailer: Mew version 4.2.53 on Emacs 22.0.50 / Mule 5.0 (SAKAKI)
From: "Shun-ichi GOTO" <shunichi.goto@xxxxxxxxx> さん曰く
Subject: Re: [MD:7362] Re: 整数のビット数
Message-ID: <2288dbd90607140120l7fe77d18yf04c239fc6d7c08c@xxxxxxxxxxxxxx>
Date: Fri, 14 Jul 2006 17:20:28 +0900
> 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 とかは大丈
夫ということですな。じゃ、今のうちに
> > 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 してくれ、ということで。
--
白井秀行 (mailto:shirai@xxxxxxxxxxx)