[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

Re: [MD:7362] Re: 整数のビット数



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)