I'll check this patch again before the end of the week since we don't seem to be in a hurry.

All I can say for sure is that in several places the compiler (not gcc, but msvc)
inserted sign extent instructions. I tracked them down to mismatches between ints and intptr_t
or ptrdiff_t. I fixed them by removing all compiler warnings of this kind.
I also had to convert all DWORD uses for adresses to DWORD_PTR (MS recommended
way of dealing with 32/64 bits).

For the record and to make sure everyone is aware of it, compiling with msvc for x64, you get :

C:\Temp>long
short 2
int 4
long 4
long long 8
void* 8

The only difference with x86 is the size of the pointer which is 4 bytes (obviously).

Regards,

Fabrice


2012/2/20 Eli Zaretskii <eliz@gnu.org>
> Date: Mon, 20 Feb 2012 12:43:34 -0800
> From: Paul Eggert <eggert@cs.ucla.edu>
> CC: Eli Zaretskii <eliz@gnu.org>, AJMR <ajmr@ilovetortilladepatatas.com>,
>  emacs-devel@gnu.org
>
> Ideally any changes for Windows 64 would be only to the
> Windows-specific part of the code, so that we don't need to worry
> about its effect on GNU hosts.

gmalloc.c and ralloc.c must be exceptions from this rule, for obvious
reasons.  (Though the 64-bit Windows build probably is, or will be,
the only 64-bit platform to use these two.)

I'd also take a very good look at all the EMACS_UINT uses, and a few
`long's and `unsigned long's in regex.c.



--
Fabrice Popineau
-----------------------------
SUPELEC
Département Informatique
3, rue Joliot Curie
91192 Gif/Yvette Cedex
Tel direct : +33 (0) 169851950
Standard : +33 (0) 169851212
------------------------------