diff --git a/mingw-w64-headers/crt/_mingw.h.in b/mingw-w64-headers/crt/_mingw.h.in
index 83fa2da..f0130b2 100644
--- a/mingw-w64-headers/crt/_mingw.h.in
+++ b/mingw-w64-headers/crt/_mingw.h.in
@@ -534,38 +534,40 @@
 #if defined(__cplusplus) && (USE___UUIDOF == 0)
 
 #if __cpp_constexpr >= 200704l && __cpp_inline_variables >= 201606L
-#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)    \
-    extern "C++" {                                               \
-    template<> struct __mingw_uuidof_s<type> {                   \
-        static constexpr IID __uuid_inst = {                     \
-            l,w1,w2, {b1,b2,b3,b4,b5,b6,b7,b8}                   \
-        };                                                       \
-    };                                                           \
-    template<> constexpr const GUID &__mingw_uuidof<type>() {    \
-        return __mingw_uuidof_s<type>::__uuid_inst;              \
-    }                                                            \
-    template<> constexpr const GUID &__mingw_uuidof<type*>() {   \
-        return  __mingw_uuidof_s<type>::__uuid_inst;             \
-    }                                                            \
+#define __CRT_UUID_DECL(_Type,_L,_W1,_W2,_B1,_B2,_B3,_B4,_B5,_B6,_B7,_B8)    \
+    extern "C++" {                                                           \
+    template<> struct __mingw_uuidof_s<_Type> {                              \
+        static constexpr IID __uuid_inst = {                                 \
+            _L,_W1,_W2,{_B1,_B2,_B3,_B4,_B5,_B6,_B7,_B8}                     \
+        };                                                                   \
+    };                                                                       \
+    template<> constexpr const GUID &__mingw_uuidof<_Type>() {               \
+        return __mingw_uuidof_s<_Type>::__uuid_inst;                         \
+    }                                                                        \
+    template<> constexpr const GUID &__mingw_uuidof<_Type*>() {              \
+        return  __mingw_uuidof_s<_Type>::__uuid_inst;                        \
+    }                                                                        \
     }
 #else
-#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)           \
-    extern "C++" {                                                      \
-    template<> inline const GUID &__mingw_uuidof<type>() {              \
-        static const IID __uuid_inst = {l,w1,w2, {b1,b2,b3,b4,b5,b6,b7,b8}}; \
-        return __uuid_inst;                                             \
-    }                                                                   \
-    template<> inline const GUID &__mingw_uuidof<type*>() {             \
-        return __mingw_uuidof<type>();                                  \
-    }                                                                   \
+#define __CRT_UUID_DECL(_Type,_L,_W1,_W2,_B1,_B2,_B3,_B4,_B5,_B6,_B7,_B8)    \
+    extern "C++" {                                                           \
+    template<> inline const GUID &__mingw_uuidof<_Type>() {                  \
+        static const IID __uuid_inst = {                                     \
+            _L,_W1,_W2,{_B1,_B2,_B3,_B4,_B5,_B6,_B7,_B8}                     \
+        };                                                                   \
+        return __uuid_inst;                                                  \
+    }                                                                        \
+    template<> inline const GUID &__mingw_uuidof<_Type*>() {                 \
+        return __mingw_uuidof<_Type>();                                      \
+    }                                                                        \
     }
 #endif
 
-#define __uuidof(type) __mingw_uuidof<__typeof(type)>()
+#define __uuidof(_Type) __mingw_uuidof<__typeof(__type)>()
 
 #else
 
-#define __CRT_UUID_DECL(type,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
+#define __CRT_UUID_DECL(_Type,_L,_W1,_W2,_B1,_B2,_B3,_B4,_B5,_B6,_B7,_B8)
 
 #endif
 
diff --git a/mingw-w64-headers/crt/_mingw_mac.h b/mingw-w64-headers/crt/_mingw_mac.h
index ee44fc3..a9cfb27 100644
--- a/mingw-w64-headers/crt/_mingw_mac.h
+++ b/mingw-w64-headers/crt/_mingw_mac.h
@@ -229,22 +229,22 @@
 #endif
 
 #if defined (_MSC_VER)
-#  define __MINGW_MSC_PREREQ(major, minor) \
-      (_MSC_VER >= (major * 100 + minor * 10))
+#  define __MINGW_MSC_PREREQ(__major, __minor) \
+      (_MSC_VER >= (__major * 100 + __minor * 10))
 #else
-#  define __MINGW_MSC_PREREQ(major, minor) 0
+#  define __MINGW_MSC_PREREQ(__major, __minor) 0
 #endif
 
 #ifdef __MINGW_MSVC_COMPAT_WARNINGS
 #  if __MINGW_GNUC_PREREQ (4, 5)
-#    define __MINGW_ATTRIB_DEPRECATED_STR(X) \
-       __attribute__ ((__deprecated__ (X)))
+#    define __MINGW_ATTRIB_DEPRECATED_STR(_X) \
+       __attribute__ ((__deprecated__ (_X)))
 #  else
-#    define __MINGW_ATTRIB_DEPRECATED_STR(X) \
+#    define __MINGW_ATTRIB_DEPRECATED_STR(_X) \
        __MINGW_ATTRIB_DEPRECATED
 #  endif
 #else
-#  define __MINGW_ATTRIB_DEPRECATED_STR(X)
+#  define __MINGW_ATTRIB_DEPRECATED_STR(_X)
 #endif /* ifdef __MINGW_MSVC_COMPAT_WARNINGS */
 
 #define __MINGW_SEC_WARN_STR \
diff --git a/mingw-w64-headers/crt/corecrt_startup.h b/mingw-w64-headers/crt/corecrt_startup.h
index be92ceb..e1732e7 100644
--- a/mingw-w64-headers/crt/corecrt_startup.h
+++ b/mingw-w64-headers/crt/corecrt_startup.h
@@ -32,8 +32,8 @@
 _CRTIMP int __cdecl _initialize_onexit_table(_onexit_table_t*);
 _CRTIMP int __cdecl _register_onexit_function(_onexit_table_t*,_onexit_t);
 _CRTIMP int __cdecl _execute_onexit_table(_onexit_table_t*);
-_CRTIMP int __cdecl _crt_atexit(_PVFV func);
-_CRTIMP int __cdecl _crt_at_quick_exit(_PVFV func);
+_CRTIMP int __cdecl _crt_atexit(_PVFV);
+_CRTIMP int __cdecl _crt_at_quick_exit(_PVFV);
 
 #ifdef __cplusplus
 }
diff --git a/mingw-w64-headers/crt/fenv.h b/mingw-w64-headers/crt/fenv.h
index 1645d07..be9aad9 100644
--- a/mingw-w64-headers/crt/fenv.h
+++ b/mingw-w64-headers/crt/fenv.h
@@ -128,19 +128,19 @@
 /* 7.6.2 Exception */
 
 extern int __cdecl feclearexcept (int);
-extern int __cdecl fegetexceptflag (fexcept_t * flagp, int excepts);
-extern int __cdecl feraiseexcept (int excepts );
+extern int __cdecl fegetexceptflag (fexcept_t *, int);
+extern int __cdecl feraiseexcept (int);
 extern int __cdecl fesetexceptflag (const fexcept_t *, int);
-extern int __cdecl fetestexcept (int excepts);
+extern int __cdecl fetestexcept (int);
 
 /* 7.6.3 Rounding */
 
 extern int __cdecl fegetround (void);
-extern int __cdecl fesetround (int mode);
+extern int __cdecl fesetround (int);
 
 /* 7.6.4 Environment */
 
-extern int __cdecl fegetenv(fenv_t * envp);
+extern int __cdecl fegetenv(fenv_t *);
 extern int __cdecl fesetenv(const fenv_t * );
 extern int __cdecl feupdateenv(const fenv_t *);
 extern int __cdecl feholdexcept(fenv_t *);
diff --git a/mingw-w64-headers/crt/getopt.h b/mingw-w64-headers/crt/getopt.h
index 1922a0e..cc8943b 100644
--- a/mingw-w64-headers/crt/getopt.h
+++ b/mingw-w64-headers/crt/getopt.h
@@ -26,7 +26,7 @@
 
 extern char *optarg;		/* pointer to argument of current option  */
 
-extern int getopt(int nargc, char * const *nargv, const char *options);
+extern int getopt(int _Nargc, char * const *_Nargv, const char *_Options);
 
 #ifdef _BSD_SOURCE
 /*
@@ -74,10 +74,8 @@
   optional_argument		/* option may take an argument		*/
 };
 
-extern int getopt_long(int nargc, char * const *nargv, const char *options,
-    const struct option *long_options, int *idx);
-extern int getopt_long_only(int nargc, char * const *nargv, const char *options,
-    const struct option *long_options, int *idx);
+extern int getopt_long(int _Nargc, char * const *_Nargv, const char *_Options, const struct option *, int *_Idx);
+extern int getopt_long_only(int _Nargc, char * const *_Nargv, const char *_Options, const struct option *, int *_Idx);
 /*
  * Previous MinGW implementation had...
  */
diff --git a/mingw-w64-headers/crt/intrin.h b/mingw-w64-headers/crt/intrin.h
index fbfee5f..19e3669 100644
--- a/mingw-w64-headers/crt/intrin.h
+++ b/mingw-w64-headers/crt/intrin.h
@@ -284,9 +284,9 @@
 #endif
     __MACHINEIA64(void __break(int))
     __MACHINECE(__MINGW_EXTENSION __int64 __cdecl _abs64(__int64))
-    __MACHINE(unsigned short __cdecl _byteswap_ushort(unsigned short value))
-    __MACHINE(unsigned __LONG32 __cdecl _byteswap_ulong(unsigned __LONG32 value))
-    __MACHINE(__MINGW_EXTENSION unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64 value))
+    __MACHINE(unsigned short __cdecl _byteswap_ushort(unsigned short))
+    __MACHINE(unsigned __LONG32 __cdecl _byteswap_ulong(unsigned __LONG32))
+    __MACHINE(__MINGW_EXTENSION unsigned __int64 __cdecl _byteswap_uint64(unsigned __int64))
     __MACHINECE(void __CacheRelease(void *))
     __MACHINECE(void __CacheWriteback(void *))
     __MACHINECE(double ceil(double))
@@ -1140,174 +1140,174 @@
     /* __MACHINEW64(__MINGW_EXTENSION __int64 _mul128(__int64 multiplier,__int64 multiplicand,__int64 *highproduct)) moved to psdk_inc/intrin-impl.h */
     /* __MACHINEI(void __int2c(void)) moved to psdk_inc/intrin-impl.h */
     /* __MACHINEIW64(void _ReadBarrier(void)) moved to psdk_inc/intrin-impl.h */
-    __MACHINEIW64(unsigned char _rotr8(unsigned char value,unsigned char shift))
-    __MACHINEIW64(unsigned short _rotr16(unsigned short value,unsigned char shift))
-    __MACHINEIW64(unsigned char _rotl8(unsigned char value,unsigned char shift))
-    __MACHINEIW64(unsigned short _rotl16(unsigned short value,unsigned char shift))
+    __MACHINEIW64(unsigned char _rotr8(unsigned char _Value,unsigned char _Shift))
+    __MACHINEIW64(unsigned short _rotr16(unsigned short _Value,unsigned char _Shift))
+    __MACHINEIW64(unsigned char _rotl8(unsigned char _Value,unsigned char _Shift))
+    __MACHINEIW64(unsigned short _rotl16(unsigned short _Value,unsigned char _Shift))
     /* __MACHINEIW64(short _InterlockedIncrement16(short volatile *Addend)) moved to psdk_inc/intrin-impl.h */
     /* __MACHINEIW64(short _InterlockedDecrement16(short volatile *Addend)) moved to psdk_inc/intrin-impl.h */
     /* __MACHINEIW64(short _InterlockedCompareExchange16(short volatile *Destination,short Exchange,short Comparand)) moved to psdk_inc/intrin-impl.h */
-    __MACHINEIA64(short _InterlockedIncrement16_acq(short volatile *Addend))
-    __MACHINEIA64(short _InterlockedIncrement16_rel(short volatile *Addend))
-    __MACHINEIA64(short _InterlockedDecrement16_acq(short volatile *Addend))
-    __MACHINEIA64(short _InterlockedDecrement16_rel(short volatile *Addend))
-    __MACHINEIA64(short _InterlockedCompareExchange16_acq(short volatile *Destination,short Exchange,short Comparand))
-    __MACHINEIA64(short _InterlockedCompareExchange16_rel(short volatile *Destination,short Exchange,short Comparand))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paddb(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paddw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paddd(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paddsb(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paddsw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paddsd(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paddusb(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paddusw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paddusd(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psubb(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psubw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psubd(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psubsb(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psubsw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psubsd(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psubusb(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psubusw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psubusd(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmaddwd(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmadduwd(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmulhw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmulhuw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmullw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmullw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmacsw(unsigned __int64 m1,unsigned __int64 m2,unsigned __int64 m3))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmacuw(unsigned __int64 m1,unsigned __int64 m2,unsigned __int64 m3))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmacszw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_padduzw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paccb(unsigned __int64 m1))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paccw(unsigned __int64 m1))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paccd(unsigned __int64 m1))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmia(unsigned __int64 m1,int i1,int i0))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmiaph(unsigned __int64 m1,int i1,int i0))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmiabb(unsigned __int64 m1,int i1,int i0))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmiabt(unsigned __int64 m1,int i1,int i0))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmiatb(unsigned __int64 m1,int i1,int i0))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmiatt(unsigned __int64 m1,int i1,int i0))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psllw(unsigned __int64 m1,unsigned __int64 count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psllwi(unsigned __int64 m1,int count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pslld(unsigned __int64 m1,unsigned __int64 count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pslldi(unsigned __int64 m1,int count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psllq(unsigned __int64 m1,unsigned __int64 count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psllqi(unsigned __int64 m1,int count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psraw(unsigned __int64 m1,unsigned __int64 count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psrawi(unsigned __int64 m1,int count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psrad(unsigned __int64 m1,unsigned __int64 count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psradi(unsigned __int64 m1,int count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psraq(unsigned __int64 m1,unsigned __int64 count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psraqi(unsigned __int64 m1,int count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psrlw(unsigned __int64 m1,unsigned __int64 count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psrlwi(unsigned __int64 m1,int count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psrld(unsigned __int64 m1,unsigned __int64 count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psrldi(unsigned __int64 m1,int count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psrlq(unsigned __int64 m1,unsigned __int64 count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psrlqi(unsigned __int64 m1,int count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_prorw(unsigned __int64 m1,unsigned __int64 count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_prorwi(unsigned __int64 m1,int count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_prord(unsigned __int64 m1,unsigned __int64 count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_prordi(unsigned __int64 m1,int count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_prorq(unsigned __int64 m1,unsigned __int64 count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_prorqi(unsigned __int64 m1,int count))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pand(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pandn(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_por(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pxor(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pcmpeqb(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pcmpeqw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pcmpeqd(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pcmpgtb(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pcmpgtub(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pcmpgtw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pcmpgtuw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pcmpgtd(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pcmpgtud(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_packsswb(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_packssdw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_packssqd(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_packuswb(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_packusdw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_packusqd(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckhbw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckhwd(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckhdq(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpcklbw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpcklwd(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckldq(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckehsbw(unsigned __int64 m1))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckehswd(unsigned __int64 m1))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckehsdq(unsigned __int64 m1))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckehubw(unsigned __int64 m1))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckehuwd(unsigned __int64 m1))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckehudq(unsigned __int64 m1))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckelsbw(unsigned __int64 m1))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckelswd(unsigned __int64 m1))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckelsdq(unsigned __int64 m1))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckelubw(unsigned __int64 m1))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckeluwd(unsigned __int64 m1))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckeludq(unsigned __int64 m1))
+    __MACHINEIA64(short _InterlockedIncrement16_acq(short volatile *))
+    __MACHINEIA64(short _InterlockedIncrement16_rel(short volatile *))
+    __MACHINEIA64(short _InterlockedDecrement16_acq(short volatile *))
+    __MACHINEIA64(short _InterlockedDecrement16_rel(short volatile *))
+    __MACHINEIA64(short _InterlockedCompareExchange16_acq(short volatile *_Destination,short _Exchange,short _Comparand))
+    __MACHINEIA64(short _InterlockedCompareExchange16_rel(short volatile *_Destination,short _Exchange,short _Comparand))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paddb(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paddw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paddd(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paddsb(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paddsw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paddsd(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paddusb(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paddusw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paddusd(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psubb(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psubw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psubd(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psubsb(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psubsw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psubsd(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psubusb(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psubusw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psubusd(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmaddwd(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmadduwd(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmulhw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmulhuw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmullw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmullw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmacsw(unsigned __int64,unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmacuw(unsigned __int64,unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmacszw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_padduzw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paccb(unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paccw(unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paccd(unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmia(unsigned __int64,int,int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmiaph(unsigned __int64,int,int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmiabb(unsigned __int64,int,int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmiabt(unsigned __int64,int,int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmiatb(unsigned __int64,int,int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmiatt(unsigned __int64,int,int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psllw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psllwi(unsigned __int64,int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pslld(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pslldi(unsigned __int64,int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psllq(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psllqi(unsigned __int64,int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psraw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psrawi(unsigned __int64,int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psrad(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psradi(unsigned __int64,int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psraq(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psraqi(unsigned __int64,int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psrlw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psrlwi(unsigned __int64,int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psrld(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psrldi(unsigned __int64,int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psrlq(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psrlqi(unsigned __int64,int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_prorw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_prorwi(unsigned __int64,int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_prord(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_prordi(unsigned __int64,int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_prorq(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_prorqi(unsigned __int64,int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pand(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pandn(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_por(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pxor(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pcmpeqb(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pcmpeqw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pcmpeqd(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pcmpgtb(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pcmpgtub(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pcmpgtw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pcmpgtuw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pcmpgtd(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pcmpgtud(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_packsswb(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_packssdw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_packssqd(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_packuswb(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_packusdw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_packusqd(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckhbw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckhwd(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckhdq(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpcklbw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpcklwd(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckldq(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckehsbw(unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckehswd(unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckehsdq(unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckehubw(unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckehuwd(unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckehudq(unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckelsbw(unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckelswd(unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckelsdq(unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckelubw(unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckeluwd(unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_punpckeludq(unsigned __int64))
     __MACHINECC(__MINGW_EXTENSION unsigned __int64 _mm_setzero_si64())
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _mm_set_pi32(int i1,int i0))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _mm_set_pi16(short s3,short s2,short s1,short s0))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _mm_set_pi8(char b7,char b6,char b5,char b4,char b3,char b2,char b1,char b0))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _mm_set1_pi32(int i))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _mm_set1_pi16(short s))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _mm_set1_pi8(char b))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _mm_setr_pi32(int i1,int i0))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _mm_setr_pi16(short s3,short s2,short s1,short s0))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _mm_setr_pi8(char b7,char b6,char b5,char b4,char b3,char b2,char b1,char b0))
-    __MACHINECC(void _mm_setwcx(int i1,int i0))
-    __MACHINECC(int _mm_getwcx(int i))
-    __MACHINECC(__MINGW_EXTENSION int _m_pextrb(unsigned __int64 m1,const int c))
-    __MACHINECC(__MINGW_EXTENSION int _m_pextrd(unsigned __int64 m1,const int c))
-    __MACHINECC(__MINGW_EXTENSION unsigned int _m_pextrub(unsigned __int64 m1,const int c))
-    __MACHINECC(__MINGW_EXTENSION unsigned int _m_pextruw(unsigned __int64 m1,const int c))
-    __MACHINECC(__MINGW_EXTENSION unsigned int _m_pextrud(unsigned __int64 m1,const int c))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pinsrb(unsigned __int64 m1,int i,const int c))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pinsrw(unsigned __int64 m1,int i,const int c))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pinsrd(unsigned __int64 m1,int i,const int c))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmaxsb(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmaxsw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmaxsd(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmaxub(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmaxuw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmaxud(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pminsb(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pminsw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pminsd(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pminub(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pminuw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pminud(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION int _m_pmovmskb(unsigned __int64 m1))
-    __MACHINECC(__MINGW_EXTENSION int _m_pmovmskw(unsigned __int64 m1))
-    __MACHINECC(__MINGW_EXTENSION int _m_pmovmskd(unsigned __int64 m1))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pshufw(unsigned __int64 m1,int i))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pavgb(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pavgw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pavg2b(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pavg2w(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psadbw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psadwd(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psadzbw(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psadzwd(unsigned __int64 m1,unsigned __int64 m2))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paligniq(unsigned __int64 m1,unsigned __int64 m2,int i))
-    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_cvt_si2pi(__int64 i))
-    __MACHINECC(__MINGW_EXTENSION __int64 _m_cvt_pi2si(unsigned __int64 m1))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _mm_set_pi32(int,int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _mm_set_pi16(short,short,short,short))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _mm_set_pi8(char,char,char,char,char,char,char,char))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _mm_set1_pi32(int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _mm_set1_pi16(short))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _mm_set1_pi8(char))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _mm_setr_pi32(int,int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _mm_setr_pi16(short,short,short,short))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _mm_setr_pi8(char,char,char,char,char,char,char,char))
+    __MACHINECC(void _mm_setwcx(int,int))
+    __MACHINECC(int _mm_getwcx(int))
+    __MACHINECC(__MINGW_EXTENSION int _m_pextrb(unsigned __int64,const int))
+    __MACHINECC(__MINGW_EXTENSION int _m_pextrd(unsigned __int64,const int))
+    __MACHINECC(__MINGW_EXTENSION unsigned int _m_pextrub(unsigned __int64,const int))
+    __MACHINECC(__MINGW_EXTENSION unsigned int _m_pextruw(unsigned __int64,const int))
+    __MACHINECC(__MINGW_EXTENSION unsigned int _m_pextrud(unsigned __int64,const int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pinsrb(unsigned __int64,int,const int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pinsrw(unsigned __int64,int,const int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pinsrd(unsigned __int64,int,const int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmaxsb(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmaxsw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmaxsd(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmaxub(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmaxuw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pmaxud(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pminsb(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pminsw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pminsd(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pminub(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pminuw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pminud(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION int _m_pmovmskb(unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION int _m_pmovmskw(unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION int _m_pmovmskd(unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pshufw(unsigned __int64,int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pavgb(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pavgw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pavg2b(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_pavg2w(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psadbw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psadwd(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psadzbw(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_psadzwd(unsigned __int64,unsigned __int64))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_paligniq(unsigned __int64,unsigned __int64,int))
+    __MACHINECC(__MINGW_EXTENSION unsigned __int64 _m_cvt_si2pi(__int64))
+    __MACHINECC(__MINGW_EXTENSION __int64 _m_cvt_pi2si(unsigned __int64))
     __MACHINEIW64(void __nvreg_save_fence(void))
     __MACHINEIW64(void __nvreg_restore_fence(void))
 
-    __MACHINEX64(short _InterlockedCompareExchange16_np(short volatile *Destination,short Exchange,short Comparand))
+    __MACHINEX64(short _InterlockedCompareExchange16_np(short volatile *_Destination,short _Exchange,short _Comparand))
     __MACHINEX64(__LONG32 _InterlockedCompareExchange_np (__LONG32 *,__LONG32,__LONG32))
     __MACHINEX64(__MINGW_EXTENSION __int64 _InterlockedCompareExchange64_np(__int64 *,__int64,__int64))
     __MACHINEX64(void *_InterlockedCompareExchangePointer_np (void **,void *,void *))
-    __MACHINEX64(__MINGW_EXTENSION __int64 _InterlockedCompare64Exchange128_np(__int64 *Destination,__int64 ExchangeHigh,__int64 ExchangeLow,__int64 Comparand))
-    __MACHINEX64(__MINGW_EXTENSION __int64 _InterlockedCompare64Exchange128_acq_np(__int64 *Destination,__int64 ExchangeHigh,__int64 ExchangeLow,__int64 Comparand))
-    __MACHINEX64(__MINGW_EXTENSION __int64 _InterlockedCompare64Exchange128_rel_np(__int64 *Destination,__int64 ExchangeHigh,__int64 ExchangeLow,__int64 Comparand))
+    __MACHINEX64(__MINGW_EXTENSION __int64 _InterlockedCompare64Exchange128_np(__int64 *_Destination,__int64 _ExchangeHigh,__int64 _ExchangeLow,__int64 _Comparand))
+    __MACHINEX64(__MINGW_EXTENSION __int64 _InterlockedCompare64Exchange128_acq_np(__int64 *_Destination,__int64 _ExchangeHigh,__int64 _ExchangeLow,__int64 _Comparand))
+    __MACHINEX64(__MINGW_EXTENSION __int64 _InterlockedCompare64Exchange128_rel_np(__int64 *_Destination,__int64 _ExchangeHigh,__int64 _ExchangeLow,__int64 _Comparand))
     __MACHINEX64(__LONG32 _InterlockedAnd_np(__LONG32 *,__LONG32))
     __MACHINEX64(char _InterlockedAnd8_np(char *,char))
     __MACHINEX64(short _InterlockedAnd16_np(short *,short))
diff --git a/mingw-w64-headers/crt/inttypes.h b/mingw-w64-headers/crt/inttypes.h
index 881025c..6e3bb3b 100644
--- a/mingw-w64-headers/crt/inttypes.h
+++ b/mingw-w64-headers/crt/inttypes.h
@@ -278,24 +278,24 @@
 #define SCNuFAST8 "hhu"
 #endif /* __STDC_VERSION__ >= 199901 */
 
-intmax_t __cdecl imaxabs (intmax_t j);
+intmax_t __cdecl imaxabs (intmax_t);
 #ifndef __CRT__NO_INLINE
-__CRT_INLINE intmax_t __cdecl imaxabs (intmax_t j)
-	{return	(j >= 0 ? j : -j);}
+__CRT_INLINE intmax_t __cdecl imaxabs (intmax_t __j)
+	{return	(__j >= 0 ? __j : -__j);}
 #endif
-imaxdiv_t __cdecl imaxdiv (intmax_t numer, intmax_t denom);
+imaxdiv_t __cdecl imaxdiv (intmax_t _Numer, intmax_t _Denom);
 
 /* 7.8.2 Conversion functions for greatest-width integer types */
 
-intmax_t __cdecl strtoimax (const char* __restrict__ nptr,
-                            char** __restrict__ endptr, int base);
-uintmax_t __cdecl strtoumax (const char* __restrict__ nptr,
-			     char** __restrict__ endptr, int base);
+intmax_t __cdecl strtoimax (const char* __restrict__ _Nptr,
+                            char** __restrict__ _Endptr, int _Base);
+uintmax_t __cdecl strtoumax (const char* __restrict__ _Nptr,
+			     char** __restrict__ _Endptr, int _Base);
 
-intmax_t __cdecl wcstoimax (const wchar_t* __restrict__ nptr,
-                            wchar_t** __restrict__ endptr, int base);
-uintmax_t __cdecl wcstoumax (const wchar_t* __restrict__ nptr,
-			     wchar_t** __restrict__ endptr, int base);
+intmax_t __cdecl wcstoimax (const wchar_t* __restrict__ _Nptr,
+                            wchar_t** __restrict__ endptr, int _Base);
+uintmax_t __cdecl wcstoumax (const wchar_t* __restrict__ _Nptr,
+			     wchar_t** __restrict__ _Endptr, int _Base);
 
 #ifdef	__cplusplus
 }
diff --git a/mingw-w64-headers/crt/io.h b/mingw-w64-headers/crt/io.h
index 8986931..69d0b92 100644
--- a/mingw-w64-headers/crt/io.h
+++ b/mingw-w64-headers/crt/io.h
@@ -257,18 +257,18 @@
 #ifndef __CRT__NO_INLINE
   __CRT_INLINE int __cdecl _findnext64i32(intptr_t _FindHandle,struct _finddata64i32_t *_FindData)
   {
-    struct __finddata64_t fd;
-    int __ret = _findnext64(_FindHandle,&fd);
+    struct __finddata64_t __fd;
+    int __ret = _findnext64(_FindHandle,&__fd);
     if (__ret == -1) {
       memset(_FindData,0,sizeof(struct _finddata64i32_t));
       return -1;
     }
-    _FindData->attrib=fd.attrib;
-    _FindData->time_create=fd.time_create;
-    _FindData->time_access=fd.time_access;
-    _FindData->time_write=fd.time_write;
-    _FindData->size=(_fsize_t) fd.size;
-    strncpy(_FindData->name,fd.name,260);
+    _FindData->attrib=__fd.attrib;
+    _FindData->time_create=__fd.time_create;
+    _FindData->time_access=__fd.time_access;
+    _FindData->time_write=__fd.time_write;
+    _FindData->size=(_fsize_t) __fd.size;
+    strncpy(_FindData->name,__fd.name,260);
     return __ret;
   }
 #endif /* __CRT__NO_INLINE */
@@ -358,7 +358,7 @@
 /* Misc stuff */
 char *getlogin(void);
 #ifdef __USE_MINGW_ALARM
-unsigned int alarm(unsigned int seconds);
+unsigned int alarm(unsigned int _Seconds);
 #endif
 
 #endif
@@ -492,4 +492,3 @@
 #pragma pack(pop)
 
 #endif /* End _IO_H_ */
-
diff --git a/mingw-w64-headers/crt/ivec.h b/mingw-w64-headers/crt/ivec.h
index 70e8c5f..9b175d9 100644
--- a/mingw-w64-headers/crt/ivec.h
+++ b/mingw-w64-headers/crt/ivec.h
@@ -35,15 +35,15 @@
     __m64 vec;
 public:
     M64() {}
-    M64(__m64 mm) { vec = mm; }
-    M64(__int64 mm) { _MM_QW = mm; }
-    M64(int i) { vec = _m_from_int(i); }
+    M64(__m64 __mm) { vec = __mm; }
+    M64(__int64 __mm) { _MM_QW = __mm; }
+    M64(int __i) { vec = _m_from_int(__i); }
 
-    operator __m64() const { return vec; }
+    operator __m64() const { return __vec; }
 
-    M64& operator&=(const M64 &a) { return *this = (M64) _m_pand(vec,a); }
-    M64& operator|=(const M64 &a) { return *this = (M64) _m_por(vec,a); }
-    M64& operator^=(const M64 &a) { return *this = (M64) _m_pxor(vec,a); }
+    M64& operator&=(const M64 &__a) { return *this = (M64) _m_pand(__vec,__a); }
+    M64& operator|=(const M64 &__a) { return *this = (M64) _m_por(__vec,__a); }
+    M64& operator^=(const M64 &__a) { return *this = (M64) _m_pxor(__vec,__a); }
 };
 
 #pragma pack(pop)
@@ -54,4 +54,3 @@
 
 #endif
 #endif
-
diff --git a/mingw-w64-headers/crt/math.h b/mingw-w64-headers/crt/math.h
index 59560a3..d09ee95 100644
--- a/mingw-w64-headers/crt/math.h
+++ b/mingw-w64-headers/crt/math.h
@@ -75,19 +75,19 @@
 #ifndef __mingw_types_compatible_p
 #ifdef __cplusplus
 extern "C++" {
-template <typename type1, typename type2> struct __mingw_types_compatible_p {
+template <typename _Type1, typename _Type2> struct __mingw_types_compatible_p {
   static const bool result = false;
 };
 
-template <typename type1> struct __mingw_types_compatible_p<type1, type1> {
+template <typename _Type1> struct __mingw_types_compatible_p<_Type1, _Type1> {
  static const bool result = true;
 };
 
-template <typename type1> struct __mingw_types_compatible_p<const type1, type1> {
+template <typename _Type1> struct __mingw_types_compatible_p<const _Type1, _Type1> {
   static const bool result = true;
 };
 
-template <typename type1> struct __mingw_types_compatible_p<type1, const type1> {
+template <typename _Type1> struct __mingw_types_compatible_p<type1, const _Type1> {
   static const bool result = true;
 };
 }
@@ -168,8 +168,7 @@
     double retval;
   };
 
-  void __mingw_raise_matherr (int typ, const char *name, double a1, double a2,
-			      double rslt);
+  void __mingw_raise_matherr (int _Type, const char *_Name, double _A1, double _A2, double _Result);
   void __mingw_setusermatherr (int (__cdecl *)(struct _exception *));
   _CRTIMP void __setusermatherr(int (__cdecl *)(struct _exception *));
   #define __setusermatherr __mingw_setusermatherr
@@ -200,36 +199,36 @@
 
 #ifndef __CRT__NO_INLINE
 #if !defined (__ia64__)
-  __CRT_INLINE float __cdecl fabsf (float x)
+  __CRT_INLINE float __cdecl fabsf (float _X)
   {
 #if defined(__x86_64__) || defined(__arm__) || defined(__aarch64__)
-    return __builtin_fabsf (x);
+    return __builtin_fabsf (_X);
 #else
-    float res = 0.0F;
-    __asm__ __volatile__ ("fabs;" : "=t" (res) : "0" (x));
-    return res;
+    float _Res = 0.0F;
+    __asm__ __volatile__ ("fabs;" : "=t" (_Res) : "0" (_X));
+    return _Res;
 #endif
   }
 
-  __CRT_INLINE long double __cdecl fabsl (long double x)
+  __CRT_INLINE long double __cdecl fabsl (long double _X)
   {
 #if defined(__arm__) || defined(__aarch64__)
-    return __builtin_fabsl (x);
+    return __builtin_fabsl (_X);
 #else
-    long double res = 0.0l;
-    __asm__ __volatile__ ("fabs;" : "=t" (res) : "0" (x));
-    return res;
+    long double _Res = 0.0l;
+    __asm__ __volatile__ ("fabs;" : "=t" (_Res) : "0" (_X));
+    return _Res;
 #endif
   }
 
-  __CRT_INLINE double __cdecl fabs (double x)
+  __CRT_INLINE double __cdecl fabs (double _X)
   {
 #if defined(__x86_64__) || defined(__arm__) || defined(__aarch64__)
-    return __builtin_fabs (x);
+    return __builtin_fabs (_X);
 #else
-    double res = 0.0;
-    __asm__ __volatile__ ("fabs;" : "=t" (res) : "0" (x));
-    return res;
+    double _Res = 0.0;
+    __asm__ __volatile__ ("fabs;" : "=t" (_Res) : "0" (_X));
+    return _Res;
 #endif
   }
 #endif
@@ -404,71 +403,71 @@
   extern int __cdecl __fpclassify (double);
 
 #ifndef __CRT__NO_INLINE
-  __CRT_INLINE int __cdecl __fpclassifyl (long double x) {
+  __CRT_INLINE int __cdecl __fpclassifyl (long double _X) {
 #if defined(__x86_64__) || defined(_AMD64_)
-    __mingw_ldbl_type_t hlp;
-    unsigned int e;
-    hlp.x = x;
-    e = hlp.lh.sign_exponent & 0x7fff;
-    if (!e)
+    __mingw_ldbl_type_t __hlp;
+    unsigned int __e;
+    __hlp.x = __X;
+    __e = __hlp.lh.sign_exponent & 0x7fff;
+    if (!__e)
       {
-        unsigned int h = hlp.lh.high;
-        if (!(hlp.lh.low | h))
+        unsigned int __h = __hlp.lh.high;
+        if (!(__hlp.lh.low | __h))
           return FP_ZERO;
-        else if (!(h & 0x80000000))
+        else if (!(__h & 0x80000000))
           return FP_SUBNORMAL;
       }
-    else if (e == 0x7fff)
-      return (((hlp.lh.high & 0x7fffffff) | hlp.lh.low) == 0 ?
+    else if (__e == 0x7fff)
+      return (((__hlp.lh.high & 0x7fffffff) | __hlp.lh.low) == 0 ?
               FP_INFINITE : FP_NAN);
     return FP_NORMAL;
 #elif defined(__arm__) || defined(_ARM_) || defined(__aarch64__) || defined(_ARM64_)
-    return __fpclassify(x);
+    return __fpclassify(_X);
 #elif defined(__i386__) || defined(_X86_)
-    unsigned short sw;
-    __asm__ __volatile__ ("fxam; fstsw %%ax;" : "=a" (sw): "t" (x));
-    return sw & (FP_NAN | FP_NORMAL | FP_ZERO );
+    unsigned short __sw;
+    __asm__ __volatile__ ("fxam; fstsw %%ax;" : "=a" (__sw): "t" (_X));
+    return __sw & (FP_NAN | FP_NORMAL | FP_ZERO);
 #endif
   }
-  __CRT_INLINE int __cdecl __fpclassify (double x) {
+  __CRT_INLINE int __cdecl __fpclassify (double _X) {
 #if defined(__x86_64__) || defined(_AMD64_) || defined(__arm__) || defined(_ARM_) || defined(__aarch64__) || defined(_ARM64_)
-    __mingw_dbl_type_t hlp;
-    unsigned int l, h;
+    __mingw_dbl_type_t __hlp;
+    unsigned int __l, __h;
 
-    hlp.x = x;
-    h = hlp.lh.high;
-    l = hlp.lh.low | (h & 0xfffff);
-    h &= 0x7ff00000;
-    if ((h | l) == 0)
+    __hlp.x = _X;
+    __h = __hlp.lh.high;
+    __l = __hlp.lh.low | (__h & 0xfffff);
+    __h &= 0x7ff00000;
+    if ((__h | __l) == 0)
       return FP_ZERO;
-    if (!h)
+    if (!__h)
       return FP_SUBNORMAL;
-    if (h == 0x7ff00000)
-      return (l ? FP_NAN : FP_INFINITE);
+    if (__h == 0x7ff00000)
+      return (__l ? FP_NAN : FP_INFINITE);
     return FP_NORMAL;
 #elif defined(__i386__) || defined(_X86_)
-    unsigned short sw;
-    __asm__ __volatile__ ("fxam; fstsw %%ax;" : "=a" (sw): "t" (x));
-    return sw & (FP_NAN | FP_NORMAL | FP_ZERO );
+    unsigned short __sw;
+    __asm__ __volatile__ ("fxam; fstsw %%ax;" : "=a" (__sw): "t" (_X));
+    return __sw & (FP_NAN | FP_NORMAL | FP_ZERO);
 #endif
   }
-  __CRT_INLINE int __cdecl __fpclassifyf (float x) {
+  __CRT_INLINE int __cdecl __fpclassifyf (float _X) {
 #if defined(__x86_64__) || defined(_AMD64_) || defined(__arm__) || defined(_ARM_) || defined(__aarch64__) || defined(_ARM64_)
-    __mingw_flt_type_t hlp;
+    __mingw_flt_type_t __hlp;
 
-    hlp.x = x;
-    hlp.val &= 0x7fffffff;
-    if (hlp.val == 0)
+    __hlp.x = _X;
+    __hlp.val &= 0x7fffffff;
+    if (__hlp.val == 0)
       return FP_ZERO;
-    if (hlp.val < 0x800000)
+    if (__hlp.val < 0x800000)
       return FP_SUBNORMAL;
-    if (hlp.val >= 0x7f800000)
-      return (hlp.val > 0x7f800000 ? FP_NAN : FP_INFINITE);
+    if (__hlp.val >= 0x7f800000)
+      return (__hlp.val > 0x7f800000 ? FP_NAN : FP_INFINITE);
     return FP_NORMAL;
 #elif defined(__i386__) || defined(_X86_)
-    unsigned short sw;
-    __asm__ __volatile__ ("fxam; fstsw %%ax;" : "=a" (sw): "t" (x));
-    return sw & (FP_NAN | FP_NORMAL | FP_ZERO );
+    unsigned short __sw;
+    __asm__ __volatile__ ("fxam; fstsw %%ax;" : "=a" (__sw): "t" (_X));
+    return __sw & (FP_NAN | FP_NORMAL | FP_ZERO);
 #endif
   }
 #endif
@@ -517,65 +516,65 @@
   extern int __cdecl __isnanl (long double);
 
 #ifndef __CRT__NO_INLINE
-  __CRT_INLINE int __cdecl __isnan (double _x)
+  __CRT_INLINE int __cdecl __isnan (double _X)
   {
 #if defined(__x86_64__) || defined(_AMD64_) || defined(__arm__) || defined(_ARM_) || defined(__aarch64__) || defined(_ARM64_)
-    __mingw_dbl_type_t hlp;
-    int l, h;
+    __mingw_dbl_type_t __hlp;
+    int __l, __h;
 
-    hlp.x = _x;
-    l = hlp.lh.low;
-    h = hlp.lh.high & 0x7fffffff;
-    h |= (unsigned int) (l | -l) >> 31;
-    h = 0x7ff00000 - h;
-    return (int) ((unsigned int) h) >> 31;
+    __hlp.x = _X;
+    __l = __hlp.lh.low;
+    __h = __hlp.lh.high & 0x7fffffff;
+    __h |= (unsigned int) (__l | -__l) >> 31;
+    __h = 0x7ff00000 - __h;
+    return (int) ((unsigned int) __h) >> 31;
 #elif defined(__i386__) || defined(_X86_)
-    unsigned short sw;
+    unsigned short __sw;
     __asm__ __volatile__ ("fxam;"
-      "fstsw %%ax": "=a" (sw) : "t" (_x));
-    return (sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
+      "fstsw %%ax": "=a" (__sw) : "t" (_X));
+    return (__sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
       == FP_NAN;
 #endif
   }
 
-  __CRT_INLINE int __cdecl __isnanf (float _x)
+  __CRT_INLINE int __cdecl __isnanf (float _X)
   {
 #if defined(__x86_64__) || defined(_AMD64_) || defined(__arm__) || defined(_ARM_) || defined(__aarch64__) || defined(_ARM64_)
-    __mingw_flt_type_t hlp;
-    int i;
+    __mingw_flt_type_t __hlp;
+    int __i;
     
-    hlp.x = _x;
-    i = hlp.val & 0x7fffffff;
-    i = 0x7f800000 - i;
-    return (int) (((unsigned int) i) >> 31);
+    __hlp.x = _X;
+    __i = hlp.val & 0x7fffffff;
+    __i = 0x7f800000 - __i;
+    return (int) (((unsigned int) __i) >> 31);
 #elif defined(__i386__) || defined(_X86_)
-    unsigned short sw;
+    unsigned short __sw;
     __asm__ __volatile__ ("fxam;"
-      "fstsw %%ax": "=a" (sw) : "t" (_x));
-    return (sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
+      "fstsw %%ax": "=a" (__sw) : "t" (_X));
+    return (__sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
       == FP_NAN;
 #endif
   }
 
-  __CRT_INLINE int __cdecl __isnanl (long double _x)
+  __CRT_INLINE int __cdecl __isnanl (long double _X)
   {
 #if defined(__x86_64__) || defined(_AMD64_)
-    __mingw_ldbl_type_t ld;
-    int xx, signexp;
+    __mingw_ldbl_type_t __ld;
+    int __xx, __signexp;
 
-    ld.x = _x;
-    signexp = (ld.lh.sign_exponent & 0x7fff) << 1;
-    xx = (int) (ld.lh.low | (ld.lh.high & 0x7fffffffu)); /* explicit */
-    signexp |= (unsigned int) (xx | (-xx)) >> 31;
-    signexp = 0xfffe - signexp;
-    return (int) ((unsigned int) signexp) >> 16;
+    __ld.x = _X;
+    __signexp = (__ld.lh.sign_exponent & 0x7fff) << 1;
+    __xx = (int) (__ld.lh.low | (__ld.lh.high & 0x7fffffffu)); /* explicit */
+    __signexp |= (unsigned int) (__xx | (-__xx)) >> 31;
+    __signexp = 0xfffe - __signexp;
+    return (int) ((unsigned int) __signexp) >> 16;
 #elif defined(__arm__) || defined(_ARM_) || defined(__aarch64__) || defined(_ARM64_)
-    return __isnan(_x);
+    return __isnan(_X);
 #elif defined(__i386__) || defined(_X86_)
-    unsigned short sw;
+    unsigned short __sw;
     __asm__ __volatile__ ("fxam;"
-      "fstsw %%ax": "=a" (sw) : "t" (_x));
-    return (sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
+      "fstsw %%ax": "=a" (__sw) : "t" (_X));
+    return (__sw & (FP_NAN | FP_NORMAL | FP_INFINITE | FP_ZERO | FP_SUBNORMAL))
       == FP_NAN;
 #endif
   }
@@ -603,42 +602,42 @@
   extern int __cdecl __signbitf (float);
   extern int __cdecl __signbitl (long double);
 #ifndef __CRT__NO_INLINE
-  __CRT_INLINE int __cdecl __signbit (double x) {
+  __CRT_INLINE int __cdecl __signbit (double _X) {
 #if defined(__x86_64__) || defined(_AMD64_) || defined(__arm__) || defined(_ARM_) || defined(__aarch64__) || defined(_ARM64_)
-    __mingw_dbl_type_t hlp;
+    __mingw_dbl_type_t __hlp;
 
-    hlp.x = x;
-    return ((hlp.lh.high & 0x80000000) != 0);
+    __hlp.x = _X;
+    return ((__hlp.lh.high & 0x80000000) != 0);
 #elif defined(__i386__) || defined(_X86_)
-    unsigned short stw;
-    __asm__ __volatile__ ( "fxam; fstsw %%ax;": "=a" (stw) : "t" (x));
-    return stw & 0x0200;
+    unsigned short __stw;
+    __asm__ __volatile__ ( "fxam; fstsw %%ax;": "=a" (__stw) : "t" (_X));
+    return __stw & 0x0200;
 #endif
   }
 
-  __CRT_INLINE int __cdecl __signbitf (float x) {
+  __CRT_INLINE int __cdecl __signbitf (float _X) {
 #if defined(__x86_64__) || defined(_AMD64_) || defined(__arm__) || defined(_ARM_) || defined(__aarch64__) || defined(_ARM64_)
-    __mingw_flt_type_t hlp;
-    hlp.x = x;
-    return ((hlp.val & 0x80000000) != 0);
+    __mingw_flt_type_t __hlp;
+    __hlp.x = _X;
+    return ((__hlp.val & 0x80000000) != 0);
 #elif defined(__i386__) || defined(_X86_)
-    unsigned short stw;
-    __asm__ __volatile__ ("fxam; fstsw %%ax;": "=a" (stw) : "t" (x));
-    return stw & 0x0200;
+    unsigned short __stw;
+    __asm__ __volatile__ ("fxam; fstsw %%ax;": "=a" (__stw) : "t" (_X));
+    return __stw & 0x0200;
 #endif
   }
 
-  __CRT_INLINE int __cdecl __signbitl (long double x) {
+  __CRT_INLINE int __cdecl __signbitl (long double _X) {
 #if defined(__x86_64__) || defined(_AMD64_)
-    __mingw_ldbl_type_t ld;
-    ld.x = x;
-    return ((ld.lh.sign_exponent & 0x8000) != 0);
+    __mingw_ldbl_type_t __ld;
+    __ld.x = _X;
+    return ((__ld.lh.sign_exponent & 0x8000) != 0);
 #elif defined(__arm__) || defined(_ARM_) || defined(__aarch64__) || defined(_ARM64_)
-    return __signbit(x);
+    return __signbit(_X);
 #elif defined(__i386__) || defined(_X86_)
-    unsigned short stw;
-    __asm__ __volatile__ ("fxam; fstsw %%ax;": "=a" (stw) : "t" (x));
-    return stw & 0x0200;
+    unsigned short __stw;
+    __asm__ __volatile__ ("fxam; fstsw %%ax;": "=a" (__stw) : "t" (_X));
+    return __stw & 0x0200;
 #endif
   }
 #endif
@@ -879,9 +878,9 @@
 
 /* 7.12.7.3  */
   extern double __cdecl hypot (double, double) __MINGW_ATTRIB_DEPRECATED_MSVC2005; /* in libmoldname.a */
-  extern float __cdecl hypotf (float x, float y);
+  extern float __cdecl hypotf (float, float);
 #ifndef __CRT__NO_INLINE
-  __CRT_INLINE float __cdecl hypotf (float x, float y) { return (float) hypot ((double)x, (double)y);}
+  __CRT_INLINE float __cdecl hypotf (float _X, float _Y) { return (float) hypot ((double)_X, (double)_Y);}
 #endif
   extern long double __cdecl hypotl (long double, long double);
 
@@ -1065,27 +1064,27 @@
 
 #ifndef __CRT__NO_INLINE
 #if !defined (__ia64__)
-  __CRT_INLINE double __cdecl copysign (double x, double y)
+  __CRT_INLINE double __cdecl copysign (double _X, double _Y)
   {
-    __mingw_dbl_type_t hx, hy;
-    hx.x = x; hy.x = y;
-    hx.lh.high = (hx.lh.high & 0x7fffffff) | (hy.lh.high & 0x80000000);
-    return hx.x;
+    __mingw_dbl_type_t __hx, __hy;
+    __hx.x = x; __hy.x = _Y;
+    __hx.lh.high = (__hx.lh.high & 0x7fffffff) | (__hy.lh.high & 0x80000000);
+    return __hx.x;
   }
-  __CRT_INLINE float __cdecl copysignf (float x, float y)
+  __CRT_INLINE float __cdecl copysignf (float _X, float _Y)
   {
-    __mingw_flt_type_t hx, hy;
-    hx.x = x; hy.x = y;
-    hx.val = (hx.val & 0x7fffffff) | (hy.val & 0x80000000);
-    return hx.x;
+    __mingw_flt_type_t __hx, __hy;
+    __hx.x = _X; __hy.x = _Y;
+    __hx.val = (__hx.val & 0x7fffffff) | (__hy.val & 0x80000000);
+    return __hx.x;
   }
 #endif
 #endif
 
 /* 7.12.11.2 Return a NaN */
-  extern double __cdecl nan(const char *tagp);
-  extern float __cdecl nanf(const char *tagp);
-  extern long double __cdecl nanl(const char *tagp);
+  extern double __cdecl nan(const char *);
+  extern float __cdecl nanf(const char *);
+  extern long double __cdecl nanl(const char *);
 
 #ifndef __STRICT_ANSI__
 #define _nan() nan("")
@@ -1105,9 +1104,9 @@
 
 /* 7.12.12.1 */
 /*  x > y ? (x - y) : 0.0  */
-  extern double __cdecl fdim (double x, double y);
-  extern float __cdecl fdimf (float x, float y);
-  extern long double __cdecl fdiml (long double x, long double y);
+  extern double __cdecl fdim (double, double);
+  extern float __cdecl fdimf (float, float);
+  extern long double __cdecl fdiml (long double, long double);
 
 /* fmax and fmin.
    NaN arguments are treated as missing data: if one argument is a NaN
@@ -1152,11 +1151,11 @@
 /*  helper  */
 #ifndef __CRT__NO_INLINE
   __CRT_INLINE int  __cdecl
-    __fp_unordered_compare (long double x, long double y){
-      unsigned short retval;
+    __fp_unordered_compare (long double _X, long double _Y) {
+      unsigned short __retval;
       __asm__ __volatile__ ("fucom %%st(1);"
-	"fnstsw;": "=a" (retval) : "t" (x), "u" (y));
-      return retval;
+	"fnstsw;": "=a" (__retval) : "t" (_X), "u" (_Y));
+      return __retval;
   }
 #endif /* __GNUC__ */
 
@@ -1206,9 +1205,9 @@
 #define DEC_INFINITY __builtin_infd32()
 #define DEC_NAN __builtin_nand32("")
 
-  extern int __cdecl __isnand32(_Decimal32 x);
-  extern int __cdecl __isnand64(_Decimal64 x);
-  extern int __cdecl __isnand128(_Decimal128 x);
+  extern int __cdecl __isnand32(_Decimal32);
+  extern int __cdecl __isnand64(_Decimal64);
+  extern int __cdecl __isnand128(_Decimal128);
   extern int __cdecl __fpclassifyd32 (_Decimal32);
   extern int __cdecl __fpclassifyd64 (_Decimal64);
   extern int __cdecl __fpclassifyd128 (_Decimal128);
@@ -1217,28 +1216,28 @@
   extern int __cdecl __signbitd128 (_Decimal128);
 
 #ifndef __CRT__NO_INLINE
-  __CRT_INLINE __cdecl __isnand32(_Decimal32 x){
-    return __builtin_isnand32(x);
+  __CRT_INLINE __cdecl __isnand32(_Decimal32 _X) {
+    return __builtin_isnand32(_X);
   }
 
-  __CRT_INLINE __cdecl __isnand64(_Decimal64 x){
-    return __builtin_isnand64(x);
+  __CRT_INLINE __cdecl __isnand64(_Decimal64 _X) {
+    return __builtin_isnand64(_X);
   }
 
-  __CRT_INLINE __cdecl __isnand128(_Decimal128 x){
-    return __builtin_isnand128(x);
+  __CRT_INLINE __cdecl __isnand128(_Decimal128 _X) {
+    return __builtin_isnand128(_X);
   }
 
-  __CRT_INLINE int __cdecl __signbitd32 (_Decimal32 x){
-    return __buintin_signbitd32(x);
+  __CRT_INLINE int __cdecl __signbitd32 (_Decimal32 _X) {
+    return __buintin_signbitd32(_X);
   }
 
-  __CRT_INLINE int __cdecl __signbitd64 (_Decimal64 x){
-    return __buintin_signbitd64(x);
+  __CRT_INLINE int __cdecl __signbitd64 (_Decimal64 _X) {
+    return __buintin_signbitd64(_X);
   }
 
-  __CRT_INLINE int __cdecl __signbitd128 (_Decimal128 x){
-    return __buintin_signbitd128(x);
+  __CRT_INLINE int __cdecl __signbitd128 (_Decimal128 _X) {
+    return __buintin_signbitd128(_X);
   }
 
 #endif
@@ -1580,4 +1579,3 @@
 #pragma pack(pop)
 
 #endif /* End _MATH_H_ */
-
diff --git a/mingw-w64-headers/crt/process.h b/mingw-w64-headers/crt/process.h
index 08b73cf..7b6a7b3 100644
--- a/mingw-w64-headers/crt/process.h
+++ b/mingw-w64-headers/crt/process.h
@@ -49,8 +49,8 @@
   /* C99 function name */
   void __cdecl _Exit(int) __MINGW_ATTRIB_NORETURN;
 #ifndef __CRT__NO_INLINE
-  __CRT_INLINE __MINGW_ATTRIB_NORETURN void  __cdecl _Exit(int status)
-  {  _exit(status); }
+  __CRT_INLINE __MINGW_ATTRIB_NORETURN void  __cdecl _Exit(int __status)
+  {  _exit(__status); }
 #endif /* !__CRT__NO_INLINE */
 #endif /* Not  __NO_ISOCEXT */
 
@@ -62,7 +62,7 @@
 #endif /* _CRT_TERMINATE_DEFINED */
 
   typedef void (__stdcall *_tls_callback_type)(void*,unsigned long,void*);
-  _CRTIMP void __cdecl _register_thread_local_exe_atexit_callback(_tls_callback_type callback);
+  _CRTIMP void __cdecl _register_thread_local_exe_atexit_callback(_tls_callback_type);
 
   void __cdecl __MINGW_NOTHROW _cexit(void);
   void __cdecl __MINGW_NOTHROW _c_exit(void);
diff --git a/mingw-w64-headers/crt/stdint.h b/mingw-w64-headers/crt/stdint.h
index 3372f75..bd8e171 100644
--- a/mingw-w64-headers/crt/stdint.h
+++ b/mingw-w64-headers/crt/stdint.h
@@ -190,21 +190,21 @@
 	The trick used here is from Clive D W Feather.
 */
 
-#define INT8_C(val) (INT_LEAST8_MAX-INT_LEAST8_MAX+(val))
-#define INT16_C(val) (INT_LEAST16_MAX-INT_LEAST16_MAX+(val))
-#define INT32_C(val) (INT_LEAST32_MAX-INT_LEAST32_MAX+(val))
+#define INT8_C(_Val) (INT_LEAST8_MAX-INT_LEAST8_MAX+(_Val))
+#define INT16_C(_Val) (INT_LEAST16_MAX-INT_LEAST16_MAX+(_Val))
+#define INT32_C(_Val) (INT_LEAST32_MAX-INT_LEAST32_MAX+(_Val))
 /*  The 'trick' doesn't work in C89 for long long because, without
-    suffix, (val) will be evaluated as int, not intmax_t */
-#define INT64_C(val) val##LL
+    suffix, (_Val) will be evaluated as int, not intmax_t */
+#define INT64_C(_Val) _Val##LL
 
-#define UINT8_C(val) (val)
-#define UINT16_C(val) (val)
-#define UINT32_C(val) (val##U)
-#define UINT64_C(val) val##ULL
+#define UINT8_C(_Val) (_Val)
+#define UINT16_C(_Val) (_Val)
+#define UINT32_C(_Val) (_Val##U)
+#define UINT64_C(_Val) _Val##ULL
 
 /* 7.18.4.2  Macros for greatest-width integer constants */
-#define INTMAX_C(val) val##LL
-#define UINTMAX_C(val) val##ULL
+#define INTMAX_C(_Val) _Val##LL
+#define UINTMAX_C(_Val) _Val##ULL
 
 #endif  /* !defined ( __cplusplus) || defined __STDC_CONSTANT_MACROS */
 
diff --git a/mingw-w64-headers/crt/stdio.h b/mingw-w64-headers/crt/stdio.h
index 0769e1e..9560b24 100644
--- a/mingw-w64-headers/crt/stdio.h
+++ b/mingw-w64-headers/crt/stdio.h
@@ -90,7 +90,7 @@
 
 #include <_mingw_off_t.h>
 
-_CRTIMP FILE *__cdecl __acrt_iob_func(unsigned index);
+_CRTIMP FILE *__cdecl __acrt_iob_func(unsigned _Index);
 #ifndef _STDIO_DEFINED
 #ifdef _WIN64
   _CRTIMP FILE *__cdecl __iob_func(void);
@@ -158,19 +158,19 @@
   int __cdecl __mingw_sscanf(const char * __restrict__ _Src,const char * __restrict__ _Format,...);
 extern
   __attribute__((__format__ (gnu_scanf, 2, 0))) __MINGW_ATTRIB_NONNULL(2)
-  int __cdecl __mingw_vsscanf (const char * __restrict__ _Str,const char * __restrict__ Format,va_list argp);
+  int __cdecl __mingw_vsscanf (const char * __restrict__ _Str,const char * __restrict__ _Format,va_list);
 extern
   __attribute__((__format__ (gnu_scanf, 1, 2))) __MINGW_ATTRIB_NONNULL(1)
   int __cdecl __mingw_scanf(const char * __restrict__ _Format,...);
 extern
   __attribute__((__format__ (gnu_scanf, 1, 0))) __MINGW_ATTRIB_NONNULL(1)
-  int __cdecl __mingw_vscanf(const char * __restrict__ Format, va_list argp);
+  int __cdecl __mingw_vscanf(const char * __restrict__ _Format, va_list);
 extern
   __attribute__((__format__ (gnu_scanf, 2, 3))) __MINGW_ATTRIB_NONNULL(2)
   int __cdecl __mingw_fscanf(FILE * __restrict__ _File,const char * __restrict__ _Format,...);
 extern
   __attribute__((__format__ (gnu_scanf, 2, 0))) __MINGW_ATTRIB_NONNULL(2)
-  int __cdecl __mingw_vfscanf (FILE * __restrict__ fp, const char * __restrict__ Format,va_list argp);
+  int __cdecl __mingw_vfscanf (FILE * __restrict__, const char * __restrict__ _Format, va_list);
 
 extern
   __attribute__((__format__ (gnu_printf, 3, 0))) __MINGW_ATTRIB_NONNULL(3)
@@ -566,11 +566,11 @@
 #endif
 
   __attribute__((__format__ (ms_scanf, 1, 0))) __MINGW_ATTRIB_NONNULL(1)
-  int __cdecl __ms_vscanf(const char * __restrict__ Format, va_list argp);
+  int __cdecl __ms_vscanf(const char * __restrict__, va_list);
   __attribute__((__format__ (ms_scanf, 2, 0))) __MINGW_ATTRIB_NONNULL(2)
-  int __cdecl __ms_vfscanf (FILE * __restrict__ fp, const char * __restrict__ Format,va_list argp);
+  int __cdecl __ms_vfscanf (FILE * __restrict__, const char * __restrict__,va_list);
   __attribute__((__format__ (ms_scanf, 2, 0))) __MINGW_ATTRIB_NONNULL(2)
-  int __cdecl __ms_vsscanf (const char * __restrict__ _Str,const char * __restrict__ Format,va_list argp);
+  int __cdecl __ms_vsscanf (const char * __restrict__,const char * __restrict__,va_list);
 
   __mingw_ovr
   __attribute__((__format__ (ms_scanf, 2, 0))) __MINGW_ATTRIB_NONNULL(2)
@@ -932,15 +932,15 @@
 /* __attribute__((__format__ (gnu_wscanf, 2, 3))) */ __MINGW_ATTRIB_NONNULL(2)
   int __cdecl __mingw_swscanf(const wchar_t * __restrict__ _Src,const wchar_t * __restrict__ _Format,...);
 /* __attribute__((__format__ (gnu_wscanf, 2, 0))) */ __MINGW_ATTRIB_NONNULL(2)
-  int __cdecl __mingw_vswscanf (const wchar_t * __restrict__ _Str,const wchar_t * __restrict__ Format,va_list argp);
+  int __cdecl __mingw_vswscanf (const wchar_t * __restrict__ _Str,const wchar_t * __restrict__ _Format,va_list);
 /* __attribute__((__format__ (gnu_wscanf, 1, 2))) */ __MINGW_ATTRIB_NONNULL(1)
   int __cdecl __mingw_wscanf(const wchar_t * __restrict__ _Format,...);
 /* __attribute__((__format__ (gnu_wscanf, 1, 0))) */ __MINGW_ATTRIB_NONNULL(1)
-  int __cdecl __mingw_vwscanf(const wchar_t * __restrict__ Format, va_list argp);
+  int __cdecl __mingw_vwscanf(const wchar_t * __restrict__ _Format, va_list);
 /* __attribute__((__format__ (gnu_wscanf, 2, 3))) */ __MINGW_ATTRIB_NONNULL(2)
-  int __cdecl __mingw_fwscanf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,...);
+  int __cdecl __mingw_fwscanf(FILE * __restrict__,const wchar_t * __restrict__ _Format,...);
 /* __attribute__((__format__ (gnu_wscanf, 2, 0))) */ __MINGW_ATTRIB_NONNULL(2)
-  int __cdecl __mingw_vfwscanf (FILE * __restrict__ fp, const wchar_t * __restrict__ Format,va_list argp);
+  int __cdecl __mingw_vfwscanf (FILE * __restrict__, const wchar_t * __restrict__ _Format,va_list);
 
 /* __attribute__((__format__ (gnu_wprintf, 2, 3))) */ __MINGW_ATTRIB_NONNULL(2)
   int __cdecl __mingw_fwprintf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,...);
@@ -1344,22 +1344,22 @@
 #ifndef __NO_ISOCEXT  /* externs in libmingwex.a */
 
 #if __USE_MINGW_ANSI_STDIO == 0
-  int __cdecl __ms_snwprintf (wchar_t * __restrict__ s, size_t n, const wchar_t * __restrict__ format, ...);
-  int __cdecl __ms_vsnwprintf (wchar_t * __restrict__ , size_t, const wchar_t * __restrict__ , va_list);
+  int __cdecl __ms_snwprintf (wchar_t * __restrict__, size_t, const wchar_t * __restrict__, ...);
+  int __cdecl __ms_vsnwprintf (wchar_t * __restrict__, size_t, const wchar_t * __restrict__ , va_list);
   __mingw_ovr
-  int snwprintf (wchar_t * __restrict__ s, size_t n, const wchar_t * __restrict__ format, ...)
+  int snwprintf (wchar_t * __restrict__ __s, size_t __n, const wchar_t * __restrict__ __format, ...)
   {
-    int r;
-    va_list argp;
-    __builtin_va_start (argp, format);
-    r = _vsnwprintf (s, n, format, argp);
-    __builtin_va_end (argp);
-    return r;
+    int __r;
+    va_list __argp;
+    __builtin_va_start (__argp, __format);
+    __r = _vsnwprintf (__s, __n, __format, __argp);
+    __builtin_va_end (__argp);
+    return __r;
   }
   __mingw_ovr
-  int __cdecl vsnwprintf (wchar_t * __restrict__ s, size_t n, const wchar_t * __restrict__ format, va_list arg)
+  int __cdecl vsnwprintf (wchar_t * __restrict__ __s, size_t __n, const wchar_t * __restrict__ __format, va_list __arg)
   {
-    return _vsnwprintf(s,n,format,arg);
+    return _vsnwprintf(__s, __n, __format, __arg);
   }
 #endif
 
@@ -1412,11 +1412,11 @@
   __CRT_INLINE wint_t __cdecl putwchar(wchar_t _C) {return (fputwc(_C,stdout)); }
 #endif
 
-#define getwc(_stm) fgetwc(_stm)
-#define putwc(_c,_stm) fputwc(_c,_stm)
+#define getwc(_Stm) fgetwc(_Stm)
+#define putwc(_C,_Stm) fputwc(_C,_Stm)
 #if __MSVCRT_VERSION__ >= 0x800
-#define _putwc_nolock(_c,_stm) _fputwc_nolock(_c,_stm)
-#define _getwc_nolock(_c) _fgetwc_nolock(_c)
+#define _putwc_nolock(_C,_stm) _fputwc_nolock(_C,_Stm)
+#define _getwc_nolock(_C) _fgetwc_nolock(_C)
 #endif
 #endif
 
@@ -1483,7 +1483,7 @@
  *
  * WideCharToMultiByte - http://msdn.microsoft.com/en-us/library/dd374130(VS.85).aspx
  */
-int __cdecl __mingw_str_wide_utf8 (const wchar_t * const wptr, char **mbptr, size_t * buflen);
+int __cdecl __mingw_str_wide_utf8 (const wchar_t * const, char **, size_t *);
 
 /**
  * __mingw_str_utf8_wide
@@ -1497,7 +1497,7 @@
  * MultiByteToWideChar - http://msdn.microsoft.com/en-us/library/dd319072(VS.85).aspx
  */
 
-int __cdecl __mingw_str_utf8_wide (const char *const mbptr, wchar_t ** wptr, size_t * buflen);
+int __cdecl __mingw_str_utf8_wide (const char *const, wchar_t **, size_t *);
 
 /**
  * __mingw_str_free
@@ -1506,7 +1506,7 @@
  *
  */
 
-void __cdecl __mingw_str_free(void *ptr);
+void __cdecl __mingw_str_free(void *);
 
 #endif /* __MINGW_MBWC_CONVERT_DEFINED */
 
diff --git a/mingw-w64-headers/crt/stdlib.h b/mingw-w64-headers/crt/stdlib.h
index 609c1c4..4ebc9db 100644
--- a/mingw-w64-headers/crt/stdlib.h
+++ b/mingw-w64-headers/crt/stdlib.h
@@ -77,7 +77,7 @@
   } _LDOUBLE;
 #pragma pack()
 
-#define _PTR_LD(x) ((unsigned char *)(&(x)->ld))
+#define _PTR_LD(_X) ((unsigned char *)(&(_X)->ld))
 
   typedef struct {
     double x;
@@ -496,8 +496,8 @@
 
 /* strtold is already an alias to __mingw_strtold */
 #else
-  double __cdecl __MINGW_NOTHROW strtod(const char * __restrict__ _Str,char ** __restrict__ _EndPtr);
-  float __cdecl __MINGW_NOTHROW strtof(const char * __restrict__ nptr, char ** __restrict__ endptr);
+  double __cdecl __MINGW_NOTHROW strtod(const char * __restrict__,char ** __restrict__);
+  float __cdecl __MINGW_NOTHROW strtof(const char * __restrict__, char ** __restrict__);
 #endif /* defined(__USE_MINGW_STRTOX) */
   long double __cdecl __MINGW_NOTHROW strtold(const char * __restrict__ , char ** __restrict__ );
 #if !defined __NO_ISOCEXT
@@ -553,8 +553,8 @@
   _CRTIMP wchar_t *__cdecl _ltow(long _Value,wchar_t *_Dest,int _Radix) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
   _CRTIMP wchar_t *__cdecl _ultow(unsigned long _Value,wchar_t *_Dest,int _Radix) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
 
-  double __cdecl __mingw_wcstod(const wchar_t * __restrict__ _Str,wchar_t ** __restrict__ _EndPtr);
-  float __cdecl __mingw_wcstof(const wchar_t * __restrict__ nptr, wchar_t ** __restrict__ endptr);
+  double __cdecl __mingw_wcstod(const wchar_t * __restrict__,wchar_t ** __restrict__);
+  float __cdecl __mingw_wcstof(const wchar_t * __restrict__, wchar_t ** __restrict__);
   long double __cdecl __mingw_wcstold(const wchar_t * __restrict__, wchar_t ** __restrict__);
 
 #if defined(__USE_MINGW_STRTOX)
@@ -568,8 +568,8 @@
   }
   /* wcstold is already a mingw implementation */
 #else
-  double __cdecl wcstod(const wchar_t * __restrict__ _Str,wchar_t ** __restrict__ _EndPtr);
-  float __cdecl wcstof(const wchar_t * __restrict__ nptr, wchar_t ** __restrict__ endptr);
+  double __cdecl wcstod(const wchar_t * __restrict__,wchar_t ** __restrict__);
+  float __cdecl wcstof(const wchar_t * __restrict__, wchar_t ** __restrict__);
 #endif /* defined(__USE_MINGW_STRTOX) */
 #if !defined __NO_ISOCEXT /* in libmingwex.a */
   long double __cdecl wcstold(const wchar_t * __restrict__, wchar_t ** __restrict__);
@@ -650,7 +650,7 @@
 #undef _rotl64
 #undef _rotr64
   __MINGW_EXTENSION unsigned __int64 __cdecl _rotl64(unsigned __int64 _Val,int _Shift);
-  __MINGW_EXTENSION unsigned __int64 __cdecl _rotr64(unsigned __int64 Value,int Shift);
+  __MINGW_EXTENSION unsigned __int64 __cdecl _rotr64(unsigned __int64 _Val,int _Shift);
 #pragma pop_macro ("_rotl64")
 #pragma pop_macro ("_rotr64")
 #pragma push_macro ("_rotr")
@@ -727,7 +727,7 @@
 
   __MINGW_EXTENSION long long __cdecl llabs(long long);
 #ifndef __CRT__NO_INLINE
-  __MINGW_EXTENSION __CRT_INLINE long long __cdecl llabs(long long _j) { return (_j >= 0 ? _j : -_j); }
+  __MINGW_EXTENSION __CRT_INLINE long long __cdecl llabs(long long __j) { return (__j >= 0 ? __j : -__j); }
 #endif
 
   __MINGW_EXTENSION long long  __cdecl strtoll(const char * __restrict__, char ** __restrict, int);
@@ -745,12 +745,12 @@
 
   /* __CRT_INLINE using non-ansi functions */
 #ifndef __CRT__NO_INLINE
-  __MINGW_EXTENSION __CRT_INLINE long long  __cdecl atoll (const char * _c) { return _atoi64 (_c); }
-  __MINGW_EXTENSION __CRT_INLINE char *__cdecl lltoa (long long _n, char * _c, int _i) { return _i64toa (_n, _c, _i); }
-  __MINGW_EXTENSION __CRT_INLINE char *__cdecl ulltoa (unsigned long long _n, char * _c, int _i) { return _ui64toa (_n, _c, _i); }
-  __MINGW_EXTENSION __CRT_INLINE long long  __cdecl wtoll (const wchar_t * _w) { return _wtoi64 (_w); }
-  __MINGW_EXTENSION __CRT_INLINE wchar_t *__cdecl lltow (long long _n, wchar_t * _w, int _i) { return _i64tow (_n, _w, _i); }
-  __MINGW_EXTENSION __CRT_INLINE wchar_t *__cdecl ulltow (unsigned long long _n, wchar_t * _w, int _i) { return _ui64tow (_n, _w, _i); }
+  __MINGW_EXTENSION __CRT_INLINE long long  __cdecl atoll (const char * __c) { return _atoi64 (__c); }
+  __MINGW_EXTENSION __CRT_INLINE char *__cdecl lltoa (long long __n, char * __c, int __i) { return _i64toa (__n, __c, __i); }
+  __MINGW_EXTENSION __CRT_INLINE char *__cdecl ulltoa (unsigned long long __n, char * __c, int __i) { return _ui64toa (__n, __c, __i); }
+  __MINGW_EXTENSION __CRT_INLINE long long  __cdecl wtoll (const wchar_t * _w) { return _wtoi64 (__w); }
+  __MINGW_EXTENSION __CRT_INLINE wchar_t *__cdecl lltow (long long __n, wchar_t * __w, int __i) { return _i64tow (__n, __w, __i); }
+  __MINGW_EXTENSION __CRT_INLINE wchar_t *__cdecl ulltow (unsigned long long __n, wchar_t * __w, int __i) { return _ui64tow (__n, __w, __i); }
 #endif /* !__CRT__NO_INLINE */
 #endif /* (__STRICT_ANSI__)  */
 
diff --git a/mingw-w64-headers/crt/tchar.h b/mingw-w64-headers/crt/tchar.h
index 9fa2a03..7e90284 100644
--- a/mingw-w64-headers/crt/tchar.h
+++ b/mingw-w64-headers/crt/tchar.h
@@ -445,13 +445,13 @@
 #define _istleadbyte(_Char) (0)
 #define _istleadbyte_l(_Char,_Locale) (0)
 
-#define _wcsdec(_cpc1,_cpc2) ((_cpc1)>=(_cpc2) ? NULL : (_cpc2)-1)
-#define _wcsinc(_pc) ((_pc)+1)
-#define _wcsnextc(_cpc) ((unsigned int) *(_cpc))
-#define _wcsninc(_pc,_sz) (((_pc)+(_sz)))
+#define _wcsdec(_Cpc1,_Cpc2) ((_Cpc1)>=(_Cpc2) ? NULL : (_Cpc2)-1)
+#define _wcsinc(_Pc) ((_Pc)+1)
+#define _wcsnextc(_Cpc) ((unsigned int) *(_Cpc))
+#define _wcsninc(_Pc,_Sz) (((_Pc)+(_Sz)))
   _CRTIMP size_t __cdecl __wcsncnt(const wchar_t *_Str,size_t _MaxCount);
-#define _wcsncnt(_cpc,_sz) (__wcsncnt(_cpc,_sz))
-#define _wcsspnp(_cpc1,_cpc2) (!_cpc1 ? NULL : ((*((_cpc1)+wcsspn(_cpc1,_cpc2))) ? ((_cpc1)+wcsspn(_cpc1,_cpc2)) : NULL))
+#define _wcsncnt(_Cpc,_Sz) (__wcsncnt(_Cpc,_Sz))
+#define _wcsspnp(_Cpc1,_Cpc2) (!_Cpc1 ? NULL : ((*((_Cpc1)+wcsspn(_Cpc1,_Cpc2))) ? ((_Cpc1)+wcsspn(_Cpc1,_Cpc2)) : NULL))
 #define _wcsncpy_l(_Destination,_Source,_Count,_Locale) (wcsncpy(_Destination,_Source,_Count))
 #define _wcsncat_l(_Destination,_Source,_Count,_Locale) (wcsncat(_Destination,_Source,_Count))
 #define _wcstok_l(_String,_Delimiters,_Locale) (wcstok(_String,_Delimiters))
@@ -484,7 +484,7 @@
 
 #define _TEOF EOF
 
-#define __T(x) x
+#define __T(_X) _X
 
 #ifndef __CYGWIN__
 
@@ -929,7 +929,7 @@
 #endif
 #endif
 
-#define _tccmp(_cp1,_cp2) _tcsnccmp(_cp1,_cp2,1)
+#define _tccmp(_Cp1,_Cp2) _tcsnccmp(_Cp1,_Cp2,1)
 
 #define _istalnum _ismbcalnum
 #define _istalnum_l _ismbcalnum_l
@@ -1054,9 +1054,9 @@
 #define _istleadbyte(_Char) (0)
 #define _istleadbyte_l(_Char,_Locale) (0)
 
-#define _tclen(_pc) (1)
-#define _tccpy(_pc1,_cpc2) (*(_pc1) = *(_cpc2))
-#define _tccmp(_cpc1,_cpc2) (((unsigned char)*(_cpc1))-((unsigned char)*(_cpc2)))
+#define _tclen(_Pc) (1)
+#define _tccpy(_Pc1,_Cpc2) (*(_Pc1) = *(_Cpc2))
+#define _tccmp(_Cpc1,_Cpc2) (((unsigned char)*(_Cpc1))-((unsigned char)*(_Cpc2)))
 
   /* dirent structures and functions */
 #define _tdirent	dirent
@@ -1106,13 +1106,13 @@
 #endif
 #endif
 
-#define _strdec(_cpc1,_cpc2) ((_cpc1)>=(_cpc2) ? NULL : (_cpc2)-1)
-#define _strinc(_pc) ((_pc)+1)
-#define _strnextc(_cpc) ((unsigned int) *(const unsigned char *)(_cpc))
-#define _strninc(_pc,_sz) (((_pc)+(_sz)))
+#define _strdec(_Cpc1,_Cpc2) ((_Cpc1)>=(_Cpc2) ? NULL : (_Cpc2)-1)
+#define _strinc(_Pc) ((_Pc)+1)
+#define _strnextc(_Cpc) ((unsigned int) *(const unsigned char *)(_Cpc))
+#define _strninc(_Pc,_Sz) (((_Pc)+(_Sz)))
   _CRTIMP size_t __cdecl __strncnt(const char *_Str,size_t _Cnt);
-#define _strncnt(_cpc,_sz) (__strncnt(_cpc,_sz))
-#define _strspnp(_cpc1,_cpc2) (!_cpc1 ? NULL : ((*((_cpc1)+strspn(_cpc1,_cpc2))) ? ((_cpc1)+strspn(_cpc1,_cpc2)) : NULL))
+#define _strncnt(_Cpc,_Sz) (__strncnt(_Cpc,_Sz))
+#define _strspnp(_Cpc1,_Cpc2) (!_Cpc1 ? NULL : ((*((_Cpc1)+strspn(_Cpc1,_Cpc2))) ? ((_Cpc1)+strspn(_Cpc1,_Cpc2)) : NULL))
 
 #define _strncpy_l(_Destination,_Source,_Count,_Locale) (strncpy(_Destination,_Source,_Count))
 #define _strncat_l(_Destination,_Source,_Count,_Locale) (strncat(_Destination,_Source,_Count))
@@ -1124,8 +1124,8 @@
 
 #endif /* __CYGWIN__ */
 
-#define _T(x) __T(x)
-#define _TEXT(x) __T(x)
+#define _T(_X) __T(_X)
+#define _TEXT(_X) __T(_X)
 
 #ifdef __cplusplus
 }
diff --git a/mingw-w64-headers/crt/time.h b/mingw-w64-headers/crt/time.h
index ad4d52d..54cfbbb 100644
--- a/mingw-w64-headers/crt/time.h
+++ b/mingw-w64-headers/crt/time.h
@@ -268,7 +268,7 @@
   int tz_dsttime;
 };
 
-  extern int __cdecl mingw_gettimeofday (struct timeval *p, struct timezone *z);
+extern int __cdecl mingw_gettimeofday (struct timeval *, struct timezone *);
 #endif /* _TIMEZONE_DEFINED */
 
 #pragma pack(pop)
@@ -309,4 +309,3 @@
 #endif
 
 #endif /* End _TIME_H_ */
-
diff --git a/mingw-w64-headers/crt/uchar.h b/mingw-w64-headers/crt/uchar.h
index 019f269..3050be7 100644
--- a/mingw-w64-headers/crt/uchar.h
+++ b/mingw-w64-headers/crt/uchar.h
@@ -47,27 +47,26 @@
 extern "C" {
 #endif
 
-size_t mbrtoc16 (char16_t *__restrict__ pc16,
-		 const char *__restrict__ s,
-		 size_t n,
-		 mbstate_t *__restrict__ ps);
+size_t mbrtoc16 (char16_t *__restrict__,
+		 const char *__restrict__,
+		 size_t,
+		 mbstate_t *__restrict__);
 
-size_t c16rtomb (char *__restrict__ s,
-		 char16_t c16,
-		 mbstate_t *__restrict__ ps);
+size_t c16rtomb (char *__restrict__,
+		 char16_t,
+		 mbstate_t *__restrict__);
 
-size_t mbrtoc32 (char32_t *__restrict__ pc32,
-		 const char *__restrict__ s,
-		 size_t n,
-		 mbstate_t *__restrict__ ps);
+size_t mbrtoc32 (char32_t *__restrict__,
+		 const char *__restrict__,
+		 size_t,
+		 mbstate_t *__restrict__);
 
-size_t c32rtomb (char *__restrict__ s,
-		 char32_t c32,
-		 mbstate_t *__restrict__ ps);
+size_t c32rtomb (char *__restrict__,
+		 char32_t,
+		 mbstate_t *__restrict__);
 
 #ifdef __cplusplus
 }
 #endif
 
 #endif /* __UCHAR_H */
-
diff --git a/mingw-w64-headers/crt/vadefs.h b/mingw-w64-headers/crt/vadefs.h
index cbc1ef8..b0c3a87 100644
--- a/mingw-w64-headers/crt/vadefs.h
+++ b/mingw-w64-headers/crt/vadefs.h
@@ -37,51 +37,51 @@
 #endif /* _VA_LIST_DEFINED */
 
 #ifdef __cplusplus
-#define _ADDRESSOF(v) (&reinterpret_cast<const char &>(v))
+#define _ADDRESSOF(_V) (&reinterpret_cast<const char &>(_V))
 #else
-#define _ADDRESSOF(v) (&(v))
+#define _ADDRESSOF(_V) (&(_V))
 #endif
 
 #if defined (__GNUC__)
 /* Use GCC builtins */
 
-#define _crt_va_start(v,l)	__builtin_va_start(v,l)
-#define _crt_va_arg(v,l)	__builtin_va_arg(v,l)
-#define _crt_va_end(v)		__builtin_va_end(v)
-#define _crt_va_copy(d,s)	__builtin_va_copy(d,s)
+#define _crt_va_start(_V,_L)	__builtin_va_start(_V,_L)
+#define _crt_va_arg(_V,_L)	__builtin_va_arg(_V,_L)
+#define _crt_va_end(_V)		__builtin_va_end(_V)
+#define _crt_va_copy(_D,_S)	__builtin_va_copy(_D,_S)
 
 #elif defined(_MSC_VER)
 /* MSVC specific */
 
 #if defined(_M_IA64)
 #define _VA_ALIGN 8
-#define _SLOTSIZEOF(t) ((sizeof(t) + _VA_ALIGN - 1) & ~(_VA_ALIGN - 1))
+#define _SLOTSIZEOF(_T) ((sizeof(_T) + _VA_ALIGN - 1) & ~(_VA_ALIGN - 1))
 #define _VA_STRUCT_ALIGN 16
-#define _ALIGNOF(ap) ((((ap)+_VA_STRUCT_ALIGN - 1) & ~(_VA_STRUCT_ALIGN -1)) - (ap))
-#define _APALIGN(t,ap) (__alignof(t) > 8 ? _ALIGNOF((uintptr_t) ap) : 0)
+#define _ALIGNOF(_Ap) ((((_Ap)+_VA_STRUCT_ALIGN - 1) & ~(_VA_STRUCT_ALIGN -1)) - (_Ap))
+#define _APALIGN(_T,_Ap) (__alignof(_T) > 8 ? _ALIGNOF((uintptr_t) _Ap) : 0)
 #else
-#define _SLOTSIZEOF(t) (sizeof(t))
-#define _APALIGN(t,ap) (__alignof(t))
+#define _SLOTSIZEOF(_T) (sizeof(_T))
+#define _APALIGN(_T,_Ap) (__alignof(_T))
 #endif
 
 #if defined(_M_IX86)
 
-#define _INTSIZEOF(n) ((sizeof(n) + sizeof(int) - 1) & ~(sizeof(int) - 1))
-#define _crt_va_start(v,l)	((v) = (va_list)_ADDRESSOF(l) + _INTSIZEOF(l))
-#define _crt_va_arg(v,l)	(*(l *)(((v) += _INTSIZEOF(l)) - _INTSIZEOF(l)))
-#define _crt_va_end(v)		((v) = (va_list)0)
-#define _crt_va_copy(d,s)	((d) = (s))
+#define _INTSIZEOF(_N) ((sizeof(_N) + sizeof(int) - 1) & ~(sizeof(int) - 1))
+#define _crt_va_start(_V,_L)	((_V) = (va_list)_ADDRESSOF(_L) + _INTSIZEOF(_L))
+#define _crt_va_arg(_V,_L)	(*(_L *)(((_V) += _INTSIZEOF(_L)) - _INTSIZEOF(_L)))
+#define _crt_va_end(_V)		((_V) = (va_list)0)
+#define _crt_va_copy(_D,_S)	((_D) = (_S))
 
 #elif defined(_M_AMD64)
 
-#define _PTRSIZEOF(n) ((sizeof(n) + sizeof(void*) - 1) & ~(sizeof(void*) - 1))
-#define _ISSTRUCT(t)  ((sizeof(t) > sizeof(void*)) || (sizeof(t) & (sizeof(t) - 1)) != 0)
-#define _crt_va_start(v,l)	((v) = (va_list)_ADDRESSOF(l) + _PTRSIZEOF(l))
-#define _crt_va_arg(v,t)	_ISSTRUCT(t) ?						\
-				 (**(t**)(((v) += sizeof(void*)) - sizeof(void*))) :	\
-				 ( *(t *)(((v) += sizeof(void*)) - sizeof(void*)))
-#define _crt_va_end(v)		((v) = (va_list)0)
-#define _crt_va_copy(d,s)	((d) = (s))
+#define _PTRSIZEOF(_N) ((sizeof(_N) + sizeof(void*) - 1) & ~(sizeof(void*) - 1))
+#define _ISSTRUCT(_T)  ((sizeof(_T) > sizeof(void*)) || (sizeof(_T) & (sizeof(_T) - 1)) != 0)
+#define _crt_va_start(_V,_L)	((_V) = (va_list)_ADDRESSOF(_L) + _PTRSIZEOF(_L))
+#define _crt_va_arg(_V,_T)	_ISSTRUCT(_T) ?						\
+				 (**(_T**)(((_V) += sizeof(void*)) - sizeof(void*))) :	\
+				 ( *(_T *)(((_V) += sizeof(void*)) - sizeof(void*)))
+#define _crt_va_end(_V)		((_V) = (va_list)0)
+#define _crt_va_copy(_D,_S)	((_D) = (_S))
 
 #elif defined(_M_IA64)
 
@@ -104,4 +104,3 @@
 #endif
 
 #endif /* _INC_VADEFS */
-
diff --git a/mingw-w64-headers/crt/wchar.h b/mingw-w64-headers/crt/wchar.h
index ab71877..e59433a 100644
--- a/mingw-w64-headers/crt/wchar.h
+++ b/mingw-w64-headers/crt/wchar.h
@@ -53,7 +53,7 @@
 #define _FILE_DEFINED
 #endif
 
-_CRTIMP FILE *__cdecl __acrt_iob_func(unsigned index);
+_CRTIMP FILE *__cdecl __acrt_iob_func(unsigned _Index);
 #ifndef _STDIO_DEFINED
 #ifdef _WIN64
   _CRTIMP FILE *__cdecl __iob_func(void);
@@ -465,15 +465,15 @@
 /* __attribute__((__format__ (gnu_wscanf, 2, 3))) */ __MINGW_ATTRIB_NONNULL(2)
   int __cdecl __mingw_swscanf(const wchar_t * __restrict__ _Src,const wchar_t * __restrict__ _Format,...);
 /* __attribute__((__format__ (gnu_wscanf, 2, 0))) */ __MINGW_ATTRIB_NONNULL(2)
-  int __cdecl __mingw_vswscanf (const wchar_t * __restrict__ _Str,const wchar_t * __restrict__ Format,va_list argp);
+  int __cdecl __mingw_vswscanf (const wchar_t * __restrict__ _Str,const wchar_t * __restrict__ Format,va_list _ArgList);
 /* __attribute__((__format__ (gnu_wscanf, 1, 2))) */ __MINGW_ATTRIB_NONNULL(1)
   int __cdecl __mingw_wscanf(const wchar_t * __restrict__ _Format,...);
 /* __attribute__((__format__ (gnu_wscanf, 1, 0))) */ __MINGW_ATTRIB_NONNULL(1)
-  int __cdecl __mingw_vwscanf(const wchar_t * __restrict__ Format, va_list argp);
+  int __cdecl __mingw_vwscanf(const wchar_t * __restrict__ Format, va_list _ArgList);
 /* __attribute__((__format__ (gnu_wscanf, 2, 3))) */ __MINGW_ATTRIB_NONNULL(2)
   int __cdecl __mingw_fwscanf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,...);
 /* __attribute__((__format__ (gnu_wscanf, 2, 0))) */ __MINGW_ATTRIB_NONNULL(2)
-  int __cdecl __mingw_vfwscanf (FILE * __restrict__ fp, const wchar_t * __restrict__ Format,va_list argp);
+  int __cdecl __mingw_vfwscanf (FILE * __restrict__ fp, const wchar_t * __restrict__ Format,va_list _ArgList);
 
 
 /* __attribute__((__format__ (gnu_wprintf, 2, 3))) */ __MINGW_ATTRIB_NONNULL(2)
@@ -487,11 +487,11 @@
 /* __attribute__((__format__ (gnu_wprintf, 3, 4))) */ __MINGW_ATTRIB_NONNULL(3)
   int __cdecl __mingw_snwprintf (wchar_t * __restrict__ s, size_t n, const wchar_t * __restrict__ format, ...);
 /* __attribute__((__format__ (gnu_wprintf, 3, 0))) */ __MINGW_ATTRIB_NONNULL(3)
-  int __cdecl __mingw_vsnwprintf (wchar_t * __restrict__ , size_t, const wchar_t * __restrict__ , va_list);
+  int __cdecl __mingw_vsnwprintf (wchar_t * __restrict__ , size_t, const wchar_t * __restrict__ , va_list _ArgList);
 /* __attribute__((__format__ (gnu_wprintf, 2, 3))) */ __MINGW_ATTRIB_NONNULL(2)
   int __cdecl __mingw_swprintf(wchar_t * __restrict__ , const wchar_t * __restrict__ , ...);
 /* __attribute__((__format__ (gnu_wprintf, 2, 0))) */ __MINGW_ATTRIB_NONNULL(2)
-  int __cdecl __mingw_vswprintf(wchar_t * __restrict__ , const wchar_t * __restrict__ ,va_list);
+  int __cdecl __mingw_vswprintf(wchar_t * __restrict__ , const wchar_t * __restrict__ ,va_list _ArgList);
 
 /* __attribute__((__format__ (ms_wscanf, 2, 3))) */ __MINGW_ATTRIB_NONNULL(2)
   int __cdecl __ms_swscanf(const wchar_t * __restrict__ _Src,const wchar_t * __restrict__ _Format,...);
@@ -511,13 +511,13 @@
 /* __attribute__((__format__ (ms_wprintf, 2, 3))) */ __MINGW_ATTRIB_NONNULL(2)
   int __cdecl __ms_swprintf(wchar_t * __restrict__ , const wchar_t * __restrict__ , ...);
 /* __attribute__((__format__ (ms_wprintf, 2, 0))) */ __MINGW_ATTRIB_NONNULL(2)
-  int __cdecl __ms_vswprintf(wchar_t * __restrict__ , const wchar_t * __restrict__ ,va_list);
+  int __cdecl __ms_vswprintf(wchar_t * __restrict__ , const wchar_t * __restrict__ ,va_list _ArgList);
 
 #ifdef _UCRT
-  int __cdecl __stdio_common_vswprintf(unsigned __int64 options, wchar_t *str, size_t len, const wchar_t *format, _locale_t locale, va_list valist);
-  int __cdecl __stdio_common_vfwprintf(unsigned __int64 options, FILE *file, const wchar_t *format, _locale_t locale, va_list valist);
-  int __cdecl __stdio_common_vswscanf(unsigned __int64 options, const wchar_t *input, size_t length, const wchar_t *format, _locale_t locale, va_list valist);
-  int __cdecl __stdio_common_vfwscanf(unsigned __int64 options, FILE *file, const wchar_t *format, _locale_t locale, va_list valist);
+  int __cdecl __stdio_common_vswprintf(unsigned __int64 _Options, wchar_t *, size_t, const wchar_t *_Format, _locale_t, va_list);
+  int __cdecl __stdio_common_vfwprintf(unsigned __int64 _Options, FILE *, const wchar_t *_Format, _locale_t, va_list);
+  int __cdecl __stdio_common_vswscanf(unsigned __int64 _Options, const wchar_t *, size_t, const wchar_t *format, _locale_t, va_list);
+  int __cdecl __stdio_common_vfwscanf(unsigned __int64 _Options, FILE *, const wchar_t *_Format, _locale_t, va_list);
 #endif
 
 #undef __mingw_ovr
@@ -736,12 +736,12 @@
   }
 #else
 
-  int __cdecl fwscanf(FILE * __restrict__ _File,const wchar_t * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
-  int __cdecl swscanf(const wchar_t * __restrict__ _Src,const wchar_t * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
+  int __cdecl fwscanf(FILE * __restrict__,const wchar_t * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
+  int __cdecl swscanf(const wchar_t * __restrict__,const wchar_t * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
   int __cdecl wscanf(const wchar_t * __restrict__ _Format,...) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
 #ifndef __NO_ISOCEXT  /* externs in libmingwex.a */
-  int __cdecl __ms_vwscanf (const wchar_t * __restrict__ , va_list);
-  int __cdecl __ms_vfwscanf (FILE * __restrict__ ,const wchar_t * __restrict__ ,va_list);
+  int __cdecl __ms_vwscanf (const wchar_t * __restrict__,va_list);
+  int __cdecl __ms_vfwscanf (FILE * __restrict__,const wchar_t * __restrict__ ,va_list);
   int __cdecl __ms_vswscanf (const wchar_t * __restrict__ ,const wchar_t * __restrict__ ,va_list);
 
   __mingw_ovr
@@ -827,19 +827,19 @@
 
 #if __USE_MINGW_ANSI_STDIO == 0
   __mingw_ovr
-  int snwprintf (wchar_t * __restrict__ s, size_t n, const wchar_t * __restrict__ format, ...)
+  int snwprintf (wchar_t * __restrict__ __s, size_t __n, const wchar_t * __restrict__ __format, ...)
   {
     __builtin_va_list __ap;
     int __ret;
-    __builtin_va_start(__ap, format);
-    __ret = __stdio_common_vswprintf(_CRT_INTERNAL_LOCAL_PRINTF_OPTIONS | _CRT_INTERNAL_PRINTF_STANDARD_SNPRINTF_BEHAVIOR, s, n, format, NULL, __ap);
+    __builtin_va_start(__ap, __format);
+    __ret = __stdio_common_vswprintf(_CRT_INTERNAL_LOCAL_PRINTF_OPTIONS | _CRT_INTERNAL_PRINTF_STANDARD_SNPRINTF_BEHAVIOR, __s, __n, __format, NULL, __ap);
     __builtin_va_end(__ap);
     return __ret;
   }
   __mingw_ovr
-  int __cdecl vsnwprintf (wchar_t * __restrict__ s, size_t n, const wchar_t * __restrict__ format, va_list arg)
+  int __cdecl vsnwprintf (wchar_t * __restrict__ __s, size_t __n, const wchar_t * __restrict__ __format, va_list __arg)
   {
-    int __ret = __stdio_common_vswprintf(_CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, s, n, format, NULL, arg);
+    int __ret = __stdio_common_vswprintf(_CRT_INTERNAL_LOCAL_PRINTF_OPTIONS, __s, __n, __format, NULL, __arg);
     return __ret < 0 ? -1 : __ret;
   }
 #endif
@@ -859,22 +859,22 @@
 #pragma push_macro("vsnwprintf")
 # undef snwprintf
 # undef vsnwprintf
-  int __cdecl __ms_snwprintf (wchar_t * __restrict__ s, size_t n, const wchar_t * __restrict__ format, ...);
-  int __cdecl __ms_vsnwprintf (wchar_t * __restrict__ , size_t, const wchar_t * __restrict__ , va_list);
+  int __cdecl __ms_snwprintf (wchar_t * __restrict__, size_t, const wchar_t * __restrict__, ...);
+  int __cdecl __ms_vsnwprintf (wchar_t * __restrict__, size_t, const wchar_t * __restrict__ , va_list);
   __mingw_ovr
-  int snwprintf (wchar_t * __restrict__ s, size_t n, const wchar_t * __restrict__ format, ...)
+  int snwprintf (wchar_t * __restrict__ __s, size_t __n, const wchar_t * __restrict__ __format, ...)
   {
-    int r;
-    va_list argp;
-    __builtin_va_start (argp, format);
-    r = _vsnwprintf (s, n, format, argp);
-    __builtin_va_end (argp);
-    return r;
+    int __r;
+    va_list __argp;
+    __builtin_va_start (__argp, __format);
+    __r = _vsnwprintf (__s, __n, __format, __argp);
+    __builtin_va_end (__argp);
+    return __r;
   }
   __mingw_ovr
-  int __cdecl vsnwprintf (wchar_t * __restrict__ s, size_t n, const wchar_t * __restrict__ format, va_list arg)
+  int __cdecl vsnwprintf (wchar_t * __restrict__ __s, size_t __n, const wchar_t * __restrict__ __format, va_list __arg)
   {
-    return _vsnwprintf(s,n,format,arg);
+    return _vsnwprintf(__s, __n, __format, __arg);
   }
 #pragma pop_macro ("vsnwprintf")
 #pragma pop_macro ("snwprintf")
@@ -1455,21 +1455,21 @@
   int __cdecl wctob(wint_t _WCh);
 
 #ifndef __NO_ISOCEXT /* these need static lib libmingwex.a */
-  wchar_t *__cdecl wmemset(wchar_t *s, wchar_t c, size_t n);
-  _CONST_RETURN wchar_t *__cdecl wmemchr(const wchar_t *s, wchar_t c, size_t n);
-  int __cdecl wmemcmp(const wchar_t *s1, const wchar_t *s2,size_t n);
-  wchar_t *__cdecl wmemcpy(wchar_t * __restrict__ s1,const wchar_t * __restrict__ s2,size_t n) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
+  wchar_t *__cdecl wmemset(wchar_t *, wchar_t, size_t);
+  _CONST_RETURN wchar_t *__cdecl wmemchr(const wchar_t *, wchar_t, size_t);
+  int __cdecl wmemcmp(const wchar_t *, const wchar_t *,size_t);
+  wchar_t *__cdecl wmemcpy(wchar_t * __restrict__,const wchar_t * __restrict__,size_t) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
   wchar_t * __cdecl wmempcpy (wchar_t *_Dst, const wchar_t *_Src, size_t _Size);
-  wchar_t *__cdecl wmemmove(wchar_t *s1, const wchar_t *s2, size_t n) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
+  wchar_t *__cdecl wmemmove(wchar_t *, const wchar_t *, size_t) __MINGW_ATTRIB_DEPRECATED_SEC_WARN;
   int __cdecl fwide(FILE *stream,int mode);
 #if defined(_UCRT) || defined(__LARGE_MBSTATE_T)
   /* With UCRT, mbsinit is only available as inline. */
   __mingw_static_ovr int __cdecl mbsinit(const mbstate_t *_P) { return (!_P || _P->_Wchar == 0); }
 #else
-  int __cdecl mbsinit(const mbstate_t *ps);
+  int __cdecl mbsinit(const mbstate_t *);
 #endif
-  __MINGW_EXTENSION long long __cdecl wcstoll(const wchar_t * __restrict__ nptr,wchar_t ** __restrict__ endptr, int base);
-  __MINGW_EXTENSION unsigned long long __cdecl wcstoull(const wchar_t * __restrict__ nptr,wchar_t ** __restrict__ endptr, int base);
+  __MINGW_EXTENSION long long __cdecl wcstoll(const wchar_t * __restrict__ _Nptr,wchar_t ** __restrict__ _Endptr, int _Base);
+  __MINGW_EXTENSION unsigned long long __cdecl wcstoull(const wchar_t * __restrict__ _Nptr,wchar_t ** __restrict__ _Endptr, int _Base);
 #endif /* __NO_ISOCEXT */
 
   void *__cdecl memmove(void *_Dst,const void *_Src,size_t _MaxCount);
@@ -1525,7 +1525,7 @@
  *
  * WideCharToMultiByte - http://msdn.microsoft.com/en-us/library/dd374130(VS.85).aspx
  */
-int __cdecl __mingw_str_wide_utf8 (const wchar_t * const wptr, char **mbptr, size_t * buflen);
+int __cdecl __mingw_str_wide_utf8 (const wchar_t * const, char **, size_t *);
 
 /**
  * __mingw_str_utf8_wide
@@ -1539,7 +1539,7 @@
  * MultiByteToWideChar - http://msdn.microsoft.com/en-us/library/dd319072(VS.85).aspx
  */
 
-int __cdecl __mingw_str_utf8_wide (const char *const mbptr, wchar_t ** wptr, size_t * buflen);
+int __cdecl __mingw_str_utf8_wide (const char *const, wchar_t **, size_t *);
 
 /**
  * __mingw_str_free
@@ -1548,7 +1548,7 @@
  *
  */
 
-void __cdecl __mingw_str_free(void *ptr);
+void __cdecl __mingw_str_free(void *);
 
 #endif /* __MINGW_MBWC_CONVERT_DEFINED */
 
@@ -1561,4 +1561,3 @@
 #include <sec_api/wchar_s.h>
 
 #endif /* _INC_WCHAR */
-
diff --git a/mingw-w64-headers/crt/xlocinfo.h b/mingw-w64-headers/crt/xlocinfo.h
index 6e08efa..4da3bc9 100644
--- a/mingw-w64-headers/crt/xlocinfo.h
+++ b/mingw-w64-headers/crt/xlocinfo.h
@@ -36,7 +36,7 @@
 #define _X_MESSAGES 6
 #define _NCAT 7
 
-#define _CATMASK(n) ((1 << (n)) >> 1)
+#define _CATMASK(_N) ((1 << (_N)) >> 1)
 #define _M_COLLATE _CATMASK(_X_COLLATE)
 #define _M_CTYPE _CATMASK(_X_CTYPE)
 #define _M_MONETARY _CATMASK(_X_MONETARY)
diff --git a/mingw-w64-headers/crt/xmath.h b/mingw-w64-headers/crt/xmath.h
index 1e8d513..bf285f9 100644
--- a/mingw-w64-headers/crt/xmath.h
+++ b/mingw-w64-headers/crt/xmath.h
@@ -30,7 +30,7 @@
 #define _DMASK ((unsigned short)(0x7fff & ~_DFRAC))
 #define _DMAX ((unsigned short)((1 << (15 - _DOFF)) - 1))
 #define _DSIGN ((unsigned short)0x8000)
-#define DSIGN(x) (((unsigned short *)&(x))[_D0] & _DSIGN)
+#define DSIGN(_X) (((unsigned short *)&(_X))[_D0] & _DSIGN)
 #define HUGE_EXP (int)(_DMAX *900L / 1000)
 #define HUGE_RAD 2.73e9
 #define SAFE_EXP ((unsigned short)(_DMAX >> 1))
@@ -39,7 +39,7 @@
 #define _FMASK ((unsigned short)(0x7fff & ~_FFRAC))
 #define _FMAX ((unsigned short)((1 << (15 - _FOFF)) - 1))
 #define _FSIGN ((unsigned short)0x8000)
-#define FSIGN(x) (((unsigned short *)&(x))[_F0] & _FSIGN)
+#define FSIGN(_X) (((unsigned short *)&(_X))[_F0] & _FSIGN)
 #define FHUGE_EXP (int)(_FMAX *900L / 1000)
 #define FHUGE_RAD 31.8
 #define FSAFE_EXP ((unsigned short)(_FMAX >> 1))
@@ -51,7 +51,7 @@
 #define _LMASK ((unsigned short)0x7fff)
 #define _LMAX ((unsigned short)0x7fff)
 #define _LSIGN ((unsigned short)0x8000)
-#define LSIGN(x) (((unsigned short *)&(x))[_L0] & _LSIGN)
+#define LSIGN(_X) (((unsigned short *)&(_X))[_L0] & _LSIGN)
 #define LHUGE_EXP (int)(_LMAX *900L / 1000)
 #define LHUGE_RAD 2.73e9
 #define LSAFE_EXP ((unsigned short)(_LMAX >> 1))
diff --git a/mingw-w64-headers/crt/yvals.h b/mingw-w64-headers/crt/yvals.h
index ec929c7..1cd14f9 100644
--- a/mingw-w64-headers/crt/yvals.h
+++ b/mingw-w64-headers/crt/yvals.h
@@ -45,8 +45,8 @@
 #define _GLOBAL_USING 1
 #define _HAS_ITERATOR_DEBUGGING 0
 
-#define __STR2WSTR(str) L##str
-#define _STR2WSTR(str) __STR2WSTR(str)
+#define __STR2WSTR(__str) L##__str
+#define _STR2WSTR(__str) __STR2WSTR(__str)
 
 #define __FILEW__ _STR2WSTR(__FILE__)
 #define __FUNCTIONW__ _STR2WSTR(__FUNCTION__)
@@ -55,35 +55,35 @@
 
 #define _SCL_SECURE_INVALID_ARGUMENT_NO_ASSERT _SCL_SECURE_INVALID_PARAMETER("invalid argument")
 #define _SCL_SECURE_OUT_OF_RANGE_NO_ASSERT _SCL_SECURE_INVALID_PARAMETER("out of range")
-#define _SCL_SECURE_ALWAYS_VALIDATE(cond) { if (!(cond)) { _ASSERTE((#cond,0)); _SCL_SECURE_INVALID_ARGUMENT_NO_ASSERT; } }
+#define _SCL_SECURE_ALWAYS_VALIDATE(__cond) { if (!(__cond)) { _ASSERTE((#__cond,0)); _SCL_SECURE_INVALID_ARGUMENT_NO_ASSERT; } }
 
-#define _SCL_SECURE_ALWAYS_VALIDATE_RANGE(cond) { if (!(cond)) { _ASSERTE((#cond,0)); _SCL_SECURE_OUT_OF_RANGE_NO_ASSERT; } }
+#define _SCL_SECURE_ALWAYS_VALIDATE_RANGE(__cond) { if (!(__cond)) { _ASSERTE((#__cond,0)); _SCL_SECURE_OUT_OF_RANGE_NO_ASSERT; } }
 
-#define _SCL_SECURE_CRT_VALIDATE(cond,retvalue) { if (!(cond)) { _ASSERTE((#cond,0)); _SCL_SECURE_INVALID_PARAMETER(cond); return (retvalue); } }
+#define _SCL_SECURE_CRT_VALIDATE(__cond,__retvalue) { if (!(__cond)) { _ASSERTE((#__cond,0)); _SCL_SECURE_INVALID_PARAMETER(__cond); return (__retvalue); } }
 
-#define _SCL_SECURE_VALIDATE(cond)
-#define _SCL_SECURE_VALIDATE_RANGE(cond)
+#define _SCL_SECURE_VALIDATE(__cond)
+#define _SCL_SECURE_VALIDATE_RANGE(__cond)
 
 #define _SCL_SECURE_INVALID_ARGUMENT
 #define _SCL_SECURE_OUT_OF_RANGE
 
-#define _SCL_SECURE_MOVE(func,dst,size,src,count) func((dst),(src),(count))
-#define _SCL_SECURE_COPY(func,dst,size,src,count) func((dst),(src),(count))
+#define _SCL_SECURE_MOVE(__func,__dst,__size,__src,__count) __func((__dst),(__src),(__count))
+#define _SCL_SECURE_COPY(__func,__dst,__size,__src,__count) __func((__dst),(__src),(__count))
 
 #define _SECURE_VALIDATION _Secure_validation
 
 #define _SECURE_VALIDATION_DEFAULT false
 
-#define _SCL_SECURE_TRAITS_VALIDATE(cond)
-#define _SCL_SECURE_TRAITS_VALIDATE_RANGE(cond)
+#define _SCL_SECURE_TRAITS_VALIDATE(__cond)
+#define _SCL_SECURE_TRAITS_VALIDATE_RANGE(__cond)
 
 #define _SCL_SECURE_TRAITS_INVALID_ARGUMENT
 #define _SCL_SECURE_TRAITS_OUT_OF_RANGE
 
-#define _CRT_SECURE_MEMCPY(dest,destsize,source,count) ::memcpy((dest),(source),(count))
-#define _CRT_SECURE_MEMMOVE(dest,destsize,source,count) ::memmove((dest),(source),(count))
-#define _CRT_SECURE_WMEMCPY(dest,destsize,source,count) ::wmemcpy((dest),(source),(count))
-#define _CRT_SECURE_WMEMMOVE(dest,destsize,source,count) ::wmemmove((dest),(source),(count))
+#define _CRT_SECURE_MEMCPY(__dest,__destsize,__source,__count) ::memcpy((__dest),(__source),(__count))
+#define _CRT_SECURE_MEMMOVE(__dest,__destsize,__source,__count) ::memmove((__dest),(__source),(__count))
+#define _CRT_SECURE_WMEMCPY(__dest,__destsize,__source,__count) ::wmemcpy((__dest),(__source),(__count))
+#define _CRT_SECURE_WMEMMOVE(__dest,__destsize,__source,__count) ::wmemmove((__dest),(__source),(__count))
 
 #ifndef _VC6SP2
 #define _VC6SP2 0
@@ -188,7 +188,7 @@
 #define _Filet _iobuf
 
 #ifndef _FPOS_T_DEFINED
-#define _FPOSOFF(fp) ((long)(fp))
+#define _FPOSOFF(__fp) ((long)(__fp))
 #endif
 
 #define _IOBASE _base
diff --git a/mingw-w64-libraries/winpthreads/include/pthread.h b/mingw-w64-libraries/winpthreads/include/pthread.h
index fe0e821..9add321 100644
--- a/mingw-w64-libraries/winpthreads/include/pthread.h
+++ b/mingw-w64-libraries/winpthreads/include/pthread.h
@@ -276,133 +276,131 @@
 #define PTHREAD_SPINLOCK_INITIALIZER			(pthread_spinlock_t)GENERIC_INITIALIZER
 
 extern void WINPTHREAD_API (**_pthread_key_dest)(void *);
-int         WINPTHREAD_API pthread_key_create(pthread_key_t *key, void (* dest)(void *));
-int         WINPTHREAD_API pthread_key_delete(pthread_key_t key);
-void *      WINPTHREAD_API pthread_getspecific(pthread_key_t key);
-int         WINPTHREAD_API pthread_setspecific(pthread_key_t key, const void *value);
+int         WINPTHREAD_API pthread_key_create(pthread_key_t *, void (*)(void *));
+int         WINPTHREAD_API pthread_key_delete(pthread_key_t);
+void *      WINPTHREAD_API pthread_getspecific(pthread_key_t);
+int         WINPTHREAD_API pthread_setspecific(pthread_key_t, const void *);
 
 pthread_t WINPTHREAD_API pthread_self(void);
-int       WINPTHREAD_API pthread_once(pthread_once_t *o, void (*func)(void));
+int       WINPTHREAD_API pthread_once(pthread_once_t *, void (*)(void));
 void      WINPTHREAD_API pthread_testcancel(void);
-int       WINPTHREAD_API pthread_equal(pthread_t t1, pthread_t t2);
+int       WINPTHREAD_API pthread_equal(pthread_t, pthread_t);
 void      WINPTHREAD_API pthread_tls_init(void);
-void      WINPTHREAD_API _pthread_cleanup_dest(pthread_t t);
-int       WINPTHREAD_API pthread_get_concurrency(int *val);
-int       WINPTHREAD_API pthread_set_concurrency(int val);
-void      WINPTHREAD_API pthread_exit(void *res);
+void      WINPTHREAD_API _pthread_cleanup_dest(pthread_t);
+int       WINPTHREAD_API pthread_get_concurrency(int *);
+int       WINPTHREAD_API pthread_set_concurrency(int);
+void      WINPTHREAD_API pthread_exit(void *);
 void      WINPTHREAD_API _pthread_invoke_cancel(void);
-int       WINPTHREAD_API pthread_cancel(pthread_t t);
-int       WINPTHREAD_API pthread_kill(pthread_t t, int sig);
-unsigned  WINPTHREAD_API _pthread_get_state(const pthread_attr_t *attr, unsigned flag);
-int       WINPTHREAD_API _pthread_set_state(pthread_attr_t *attr, unsigned flag, unsigned val);
-int       WINPTHREAD_API pthread_setcancelstate(int state, int *oldstate);
-int       WINPTHREAD_API pthread_setcanceltype(int type, int *oldtype);
-int       WINPTHREAD_API pthread_create_wrapper(void *args);
-int       WINPTHREAD_API pthread_create(pthread_t *th, const pthread_attr_t *attr, void *(* func)(void *), void *arg);
-int       WINPTHREAD_API pthread_join(pthread_t t, void **res);
-int       WINPTHREAD_API pthread_detach(pthread_t t);
-int       WINPTHREAD_API pthread_setname_np(pthread_t thread, const char *name);
-int       WINPTHREAD_API pthread_getname_np(pthread_t thread, char *name, size_t len);
+int       WINPTHREAD_API pthread_cancel(pthread_t);
+int       WINPTHREAD_API pthread_kill(pthread_t, int _Signal);
+unsigned  WINPTHREAD_API _pthread_get_state(const pthread_attr_t *, unsigned _Flag);
+int       WINPTHREAD_API _pthread_set_state(pthread_attr_t *, unsigned _Flag, unsigned _State);
+int       WINPTHREAD_API pthread_setcancelstate(int _State, int *_Oldstate);
+int       WINPTHREAD_API pthread_setcanceltype(int _Type, int *_Oldtype);
+int       WINPTHREAD_API pthread_create_wrapper(void *);
+int       WINPTHREAD_API pthread_create(pthread_t *, const pthread_attr_t *, void *(*)(void *), void *);
+int       WINPTHREAD_API pthread_join(pthread_t, void **);
+int       WINPTHREAD_API pthread_detach(pthread_t);
+int       WINPTHREAD_API pthread_setname_np(pthread_t, const char *);
+int       WINPTHREAD_API pthread_getname_np(pthread_t, char *, size_t);
 
 
-int WINPTHREAD_API pthread_rwlock_init(pthread_rwlock_t *rwlock_, const pthread_rwlockattr_t *attr);
-int WINPTHREAD_API pthread_rwlock_wrlock(pthread_rwlock_t *l);
-int WINPTHREAD_API pthread_rwlock_timedwrlock(pthread_rwlock_t *rwlock, const struct timespec *ts);
-int WINPTHREAD_API pthread_rwlock_rdlock(pthread_rwlock_t *l);
-int WINPTHREAD_API pthread_rwlock_timedrdlock(pthread_rwlock_t *l, const struct timespec *ts);
-int WINPTHREAD_API pthread_rwlock_unlock(pthread_rwlock_t *l);
-int WINPTHREAD_API pthread_rwlock_tryrdlock(pthread_rwlock_t *l);
-int WINPTHREAD_API pthread_rwlock_trywrlock(pthread_rwlock_t *l);
-int WINPTHREAD_API pthread_rwlock_destroy (pthread_rwlock_t *l);
+int WINPTHREAD_API pthread_rwlock_init(pthread_rwlock_t *, const pthread_rwlockattr_t *);
+int WINPTHREAD_API pthread_rwlock_wrlock(pthread_rwlock_t *);
+int WINPTHREAD_API pthread_rwlock_timedwrlock(pthread_rwlock_t *, const struct timespec *);
+int WINPTHREAD_API pthread_rwlock_rdlock(pthread_rwlock_t *);
+int WINPTHREAD_API pthread_rwlock_timedrdlock(pthread_rwlock_t *, const struct timespec *);
+int WINPTHREAD_API pthread_rwlock_unlock(pthread_rwlock_t *);
+int WINPTHREAD_API pthread_rwlock_tryrdlock(pthread_rwlock_t *);
+int WINPTHREAD_API pthread_rwlock_trywrlock(pthread_rwlock_t *);
+int WINPTHREAD_API pthread_rwlock_destroy (pthread_rwlock_t *);
 
-int WINPTHREAD_API pthread_cond_init(pthread_cond_t *cv, const pthread_condattr_t *a);
-int WINPTHREAD_API pthread_cond_destroy(pthread_cond_t *cv);
-int WINPTHREAD_API pthread_cond_signal (pthread_cond_t *cv);
-int WINPTHREAD_API pthread_cond_broadcast (pthread_cond_t *cv);
-int WINPTHREAD_API pthread_cond_wait (pthread_cond_t *cv, pthread_mutex_t *external_mutex);
-int WINPTHREAD_API pthread_cond_timedwait(pthread_cond_t *cv, pthread_mutex_t *external_mutex, const struct timespec *t);
-int WINPTHREAD_API pthread_cond_timedwait_relative_np(pthread_cond_t *cv, pthread_mutex_t *external_mutex, const struct timespec *t);
+int WINPTHREAD_API pthread_cond_init(pthread_cond_t *, const pthread_condattr_t *);
+int WINPTHREAD_API pthread_cond_destroy(pthread_cond_t *);
+int WINPTHREAD_API pthread_cond_signal (pthread_cond_t *);
+int WINPTHREAD_API pthread_cond_broadcast (pthread_cond_t *);
+int WINPTHREAD_API pthread_cond_wait (pthread_cond_t *, pthread_mutex_t *);
+int WINPTHREAD_API pthread_cond_timedwait(pthread_cond_t *, pthread_mutex_t *, const struct timespec *);
+int WINPTHREAD_API pthread_cond_timedwait_relative_np(pthread_cond_t *, pthread_mutex_t *, const struct timespec *);
 
-int WINPTHREAD_API pthread_mutex_lock(pthread_mutex_t *m);
-int WINPTHREAD_API pthread_mutex_timedlock(pthread_mutex_t *m, const struct timespec *ts);
-int WINPTHREAD_API pthread_mutex_unlock(pthread_mutex_t *m);
-int WINPTHREAD_API pthread_mutex_trylock(pthread_mutex_t *m);
-int WINPTHREAD_API pthread_mutex_init(pthread_mutex_t *m, const pthread_mutexattr_t *a);
-int WINPTHREAD_API pthread_mutex_destroy(pthread_mutex_t *m);
+int WINPTHREAD_API pthread_mutex_lock(pthread_mutex_t *);
+int WINPTHREAD_API pthread_mutex_timedlock(pthread_mutex_t *, const struct timespec *);
+int WINPTHREAD_API pthread_mutex_unlock(pthread_mutex_t *);
+int WINPTHREAD_API pthread_mutex_trylock(pthread_mutex_t *);
+int WINPTHREAD_API pthread_mutex_init(pthread_mutex_t *, const pthread_mutexattr_t *);
+int WINPTHREAD_API pthread_mutex_destroy(pthread_mutex_t *);
 
-int WINPTHREAD_API pthread_barrier_destroy(pthread_barrier_t *b);
-int WINPTHREAD_API pthread_barrier_init(pthread_barrier_t *b, const void *attr, unsigned int count);
-int WINPTHREAD_API pthread_barrier_wait(pthread_barrier_t *b);
+int WINPTHREAD_API pthread_barrier_destroy(pthread_barrier_t *);
+int WINPTHREAD_API pthread_barrier_init(pthread_barrier_t *, const void *attr, unsigned int _Count);
+int WINPTHREAD_API pthread_barrier_wait(pthread_barrier_t *);
 
-int WINPTHREAD_API pthread_spin_init(pthread_spinlock_t *l, int pshared);
-int WINPTHREAD_API pthread_spin_destroy(pthread_spinlock_t *l);
+int WINPTHREAD_API pthread_spin_init(pthread_spinlock_t *, int _Pshared);
+int WINPTHREAD_API pthread_spin_destroy(pthread_spinlock_t *);
 /* No-fair spinlock due to lack of knowledge of thread number.  */
-int WINPTHREAD_API pthread_spin_lock(pthread_spinlock_t *l);
-int WINPTHREAD_API pthread_spin_trylock(pthread_spinlock_t *l);
-int WINPTHREAD_API pthread_spin_unlock(pthread_spinlock_t *l);
+int WINPTHREAD_API pthread_spin_lock(pthread_spinlock_t *);
+int WINPTHREAD_API pthread_spin_trylock(pthread_spinlock_t *);
+int WINPTHREAD_API pthread_spin_unlock(pthread_spinlock_t *);
 
-int WINPTHREAD_API pthread_attr_init(pthread_attr_t *attr);
-int WINPTHREAD_API pthread_attr_destroy(pthread_attr_t *attr);
-int WINPTHREAD_API pthread_attr_setdetachstate(pthread_attr_t *a, int flag);
-int WINPTHREAD_API pthread_attr_getdetachstate(const pthread_attr_t *a, int *flag);
-int WINPTHREAD_API pthread_attr_setinheritsched(pthread_attr_t *a, int flag);
-int WINPTHREAD_API pthread_attr_getinheritsched(const pthread_attr_t *a, int *flag);
-int WINPTHREAD_API pthread_attr_setscope(pthread_attr_t *a, int flag);
-int WINPTHREAD_API pthread_attr_getscope(const pthread_attr_t *a, int *flag);
-int WINPTHREAD_API pthread_attr_getstack(const pthread_attr_t *attr, void **stack, size_t *size);
-int WINPTHREAD_API pthread_attr_setstack(pthread_attr_t *attr, void *stack, size_t size);
-int WINPTHREAD_API pthread_attr_getstackaddr(const pthread_attr_t *attr, void **stack);
-int WINPTHREAD_API pthread_attr_setstackaddr(pthread_attr_t *attr, void *stack);
-int WINPTHREAD_API pthread_attr_getstacksize(const pthread_attr_t *attr, size_t *size);
-int WINPTHREAD_API pthread_attr_setstacksize(pthread_attr_t *attr, size_t size);
+int WINPTHREAD_API pthread_attr_init(pthread_attr_t *);
+int WINPTHREAD_API pthread_attr_destroy(pthread_attr_t *);
+int WINPTHREAD_API pthread_attr_setdetachstate(pthread_attr_t *, int _Flag);
+int WINPTHREAD_API pthread_attr_getdetachstate(const pthread_attr_t *, int *_Flag);
+int WINPTHREAD_API pthread_attr_setinheritsched(pthread_attr_t *, int _Flag);
+int WINPTHREAD_API pthread_attr_getinheritsched(const pthread_attr_t *, int *_Flag);
+int WINPTHREAD_API pthread_attr_setscope(pthread_attr_t *, int _Flag);
+int WINPTHREAD_API pthread_attr_getscope(const pthread_attr_t *, int *_Flag);
+int WINPTHREAD_API pthread_attr_getstack(const pthread_attr_t *, void **, size_t *);
+int WINPTHREAD_API pthread_attr_setstack(pthread_attr_t *, void *, size_t);
+int WINPTHREAD_API pthread_attr_getstackaddr(const pthread_attr_t *, void **);
+int WINPTHREAD_API pthread_attr_setstackaddr(pthread_attr_t *, void *);
+int WINPTHREAD_API pthread_attr_getstacksize(const pthread_attr_t *, size_t *);
+int WINPTHREAD_API pthread_attr_setstacksize(pthread_attr_t *, size_t);
 
-int WINPTHREAD_API pthread_mutexattr_init(pthread_mutexattr_t *a);
-int WINPTHREAD_API pthread_mutexattr_destroy(pthread_mutexattr_t *a);
-int WINPTHREAD_API pthread_mutexattr_gettype(const pthread_mutexattr_t *a, int *type);
-int WINPTHREAD_API pthread_mutexattr_settype(pthread_mutexattr_t *a, int type);
-int WINPTHREAD_API pthread_mutexattr_getpshared(const pthread_mutexattr_t *a, int *type);
-int WINPTHREAD_API pthread_mutexattr_setpshared(pthread_mutexattr_t * a, int type);
-int WINPTHREAD_API pthread_mutexattr_getprotocol(const pthread_mutexattr_t *a, int *type);
-int WINPTHREAD_API pthread_mutexattr_setprotocol(pthread_mutexattr_t *a, int type);
-int WINPTHREAD_API pthread_mutexattr_getprioceiling(const pthread_mutexattr_t *a, int * prio);
-int WINPTHREAD_API pthread_mutexattr_setprioceiling(pthread_mutexattr_t *a, int prio);
+int WINPTHREAD_API pthread_mutexattr_init(pthread_mutexattr_t *);
+int WINPTHREAD_API pthread_mutexattr_destroy(pthread_mutexattr_t *);
+int WINPTHREAD_API pthread_mutexattr_gettype(const pthread_mutexattr_t *, int *);
+int WINPTHREAD_API pthread_mutexattr_set_Type(pthread_mutexattr_t *, int);
+int WINPTHREAD_API pthread_mutexattr_getpshared(const pthread_mutexattr_t *, int *);
+int WINPTHREAD_API pthread_mutexattr_setpshared(pthread_mutexattr_t *, int);
+int WINPTHREAD_API pthread_mutexattr_getprotocol(const pthread_mutexattr_t *, int *);
+int WINPTHREAD_API pthread_mutexattr_setprotocol(pthread_mutexattr_t *, int);
+int WINPTHREAD_API pthread_mutexattr_getprioceiling(const pthread_mutexattr_t *, int *);
+int WINPTHREAD_API pthread_mutexattr_setprioceiling(pthread_mutexattr_t *, int);
 int WINPTHREAD_API pthread_getconcurrency(void);
-int WINPTHREAD_API pthread_setconcurrency(int new_level);
+int WINPTHREAD_API pthread_setconcurrency(int);
 
-int WINPTHREAD_API pthread_condattr_destroy(pthread_condattr_t *a);
-int WINPTHREAD_API pthread_condattr_init(pthread_condattr_t *a);
-int WINPTHREAD_API pthread_condattr_getpshared(const pthread_condattr_t *a, int *s);
-int WINPTHREAD_API pthread_condattr_setpshared(pthread_condattr_t *a, int s);
+int WINPTHREAD_API pthread_condattr_destroy(pthread_condattr_t *);
+int WINPTHREAD_API pthread_condattr_init(pthread_condattr_t *);
+int WINPTHREAD_API pthread_condattr_getpshared(const pthread_condattr_t *, int *);
+int WINPTHREAD_API pthread_condattr_setpshared(pthread_condattr_t *, int);
 
 #ifndef __clockid_t_defined
 typedef int clockid_t;
 #define __clockid_t_defined 1
 #endif  /* __clockid_t_defined */
 
-int WINPTHREAD_API pthread_condattr_getclock (const pthread_condattr_t *attr,
-       clockid_t *clock_id);
-int WINPTHREAD_API pthread_condattr_setclock(pthread_condattr_t *attr,
-       clockid_t clock_id);
-int WINPTHREAD_API __pthread_clock_nanosleep(clockid_t clock_id, int flags, const struct timespec *rqtp, struct timespec *rmtp);
+int WINPTHREAD_API pthread_condattr_getclock (const pthread_condattr_t *, clockid_t *);
+int WINPTHREAD_API pthread_condattr_setclock(pthread_condattr_t *, clockid_t);
+int WINPTHREAD_API __pthread_clock_nanosleep(clockid_t, int _Flags, const struct timespec *, struct timespec *);
 
-int WINPTHREAD_API pthread_barrierattr_init(void **attr);
-int WINPTHREAD_API pthread_barrierattr_destroy(void **attr);
-int WINPTHREAD_API pthread_barrierattr_setpshared(void **attr, int s);
-int WINPTHREAD_API pthread_barrierattr_getpshared(void **attr, int *s);
+int WINPTHREAD_API pthread_barrierattr_init(void **);
+int WINPTHREAD_API pthread_barrierattr_destroy(void **);
+int WINPTHREAD_API pthread_barrierattr_setpshared(void **, int);
+int WINPTHREAD_API pthread_barrierattr_getpshared(void **, int *);
 
 /* Private extensions for analysis and internal use.  */
 struct _pthread_cleanup ** WINPTHREAD_API pthread_getclean (void);
-void *                     WINPTHREAD_API pthread_gethandle (pthread_t t);
+void *                     WINPTHREAD_API pthread_gethandle (pthread_t);
 void *                     WINPTHREAD_API pthread_getevent ();
 
-unsigned long long         WINPTHREAD_API _pthread_rel_time_in_ms(const struct timespec *ts);
+unsigned long long         WINPTHREAD_API _pthread_rel_time_in_ms(const struct timespec *);
 unsigned long long         WINPTHREAD_API _pthread_time_in_ms(void);
-unsigned long long         WINPTHREAD_API _pthread_time_in_ms_from_timespec(const struct timespec *ts);
-int                        WINPTHREAD_API _pthread_tryjoin (pthread_t t, void **res);
-int                        WINPTHREAD_API pthread_rwlockattr_destroy(pthread_rwlockattr_t *a);
-int                        WINPTHREAD_API pthread_rwlockattr_getpshared(pthread_rwlockattr_t *a, int *s);
-int                        WINPTHREAD_API pthread_rwlockattr_init(pthread_rwlockattr_t *a);
-int                        WINPTHREAD_API pthread_rwlockattr_setpshared(pthread_rwlockattr_t *a, int s);
+unsigned long long         WINPTHREAD_API _pthread_time_in_ms_from_timespec(const struct timespec *);
+int                        WINPTHREAD_API _pthread_tryjoin (pthread_t, void **);
+int                        WINPTHREAD_API pthread_rwlockattr_destroy(pthread_rwlockattr_t *);
+int                        WINPTHREAD_API pthread_rwlockattr_getpshared(pthread_rwlockattr_t *, int *);
+int                        WINPTHREAD_API pthread_rwlockattr_init(pthread_rwlockattr_t *);
+int                        WINPTHREAD_API pthread_rwlockattr_setpshared(pthread_rwlockattr_t *, int);
 
 #ifndef SIG_BLOCK
 #define SIG_BLOCK 0
