I've ported Vim to Win64. Native binaries for AMD64 can be found on my
Vim page.
In the end, it wasn't all that hard. Last weekend, I fixed approximately
400 warnings that were thrown up by the x86_amd64 cross compiler.
Most of them were due to the widening of size_t (especially the value
returned from strlen()) and ptrdiff_t to 64 bits.
Several years ago, I went through a similar exercise in fixing these
warnings for Vim6, but I never finished the port.
This week, I scrounged access to an AMD64 box at work. Today, I turned on
the /Wp64 flag,
which found several new, subtler problems, where pointers where being
truncated to __int32s or conversely
__int32s were being widened to
pointers. Judicious introduction of (the equivalent of) (INT_PTR) casts
fixed most of those.
At that point, I tried running the binary. It refused to start!
After a few detours, I had WinDbg
installed, and ran gvim under WinDbg. That showed that the error was 14001
(ERROR_SXS_CANT_GEN_ACTCTX, "The application has failed to start because its
side-by-side configuration is incorrect. Please see the application event
log for more detail.") The event log showed nothing.
After more investigation, I found a WinSxS manifest for the Windows Common
Controls:
processorArchitecture="X86"
version="6.2.0.0"
type="win32"
name="Vim"
/>
Vi Improved - A Text Editor
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
publicKeyToken="6595b64144ccf1df"
language="*"
processorArchitecture="X86"
/>
Once the two instances of processorArchitecture="X86" were set to
processorArchitecture="AMD64", Vim started working without a hitch.
Despite my naïve expectations, none of the other fields in the comctl32
assembly needed to be changed.