# define restrict
#endif
+/* A va_copy replacement for MSVC. */
+#ifdef _MSC_VER
+# ifdef _WIN64
+# ifndef va_copy
+# error "va_copy is needed, but not defined!"
+# endif
+# else /* not _WIN64 */
+# define va_copy(d,s) ((d) = (s))
+# endif /* not _WIN64 */
+#endif /* _MSC_VER */
+
/* Define as a marker that can be attached to declarations that might not
be used. This helps to reduce warnings, such as from
GCC -Wunused-parameter. */
#define BITS_PER_LONG 32
#endif
-#if defined __MINGW32__ || 1400 <= _MSC_VER
-/* C99-style long long and "%lld" both work, so use them. */
-# define BITS_PER_LONG_LONG 64
-#elif 1200 <= _MSC_VER
+#if defined(__MINGW32__) || _MSC_VER >= 1400
+
+/* Define to 1 if the system has the type `long long int'. */
+# define HAVE_LONG_LONG_INT 1
+
+/* Define to 1 if the system has the type `unsigned long long int'. */
+# define HAVE_UNSIGNED_LONG_LONG_INT 1
+
+#elif _MSC_VER >= 1200
+
+/* Temporarily disable wider-than-pointer integers until they're tested more.
+ Build with CFLAGS='-DWIDE_EMACS_INT' to try them out. */
+/* #undef WIDE_EMACS_INT */
+
+# ifdef WIDE_EMACS_INT
+
/* Use pre-C99-style 64-bit integers. */
# define EMACS_INT __int64
# define BITS_PER_EMACS_INT 64
# define pI "I64"
+
+# endif
+
#endif
#ifndef POINTER_TYPE