+/* needed on Windows */
+#ifdef __w64
+#undef __w64
+#endif
+#ifdef __ptr64
+#undef __ptr64
+#endif
+
+/* needed on MinGW */
+#ifdef __MINGW32__
+#ifdef __int8
+#undef __int8
+#endif
+#ifdef __int16
+#undef __int16
+#endif
+#ifdef __int32
+#undef __int32
+#endif
+#ifdef __int64
+#undef __int64
+#endif
+#endif
+
+#if defined(__MINGW32__) || defined(__CYGWIN__)
+#ifdef __cdecl
+#undef __cdecl
+#endif
+#ifdef __stdcall
+#undef __stdcall
+#endif
+#ifdef __fastcall
+#undef __fastcall
+#endif
+#endif
+
+/* needed on darwin... */
+#ifdef __signed
+#undef __signed
+#endif
+#ifdef __volatile
+#undef __volatile
+#endif
+#ifdef __const
+#undef __const
+#endif
+#ifdef __restrict
+#undef __restrict
+#endif
+
+#define S(mode, x, val) T(mode, x, #x, val)
+S(_ANSI|_C99|_CXX, signed, )
+S(_ALL, __signed, = T_signed)
+S(_ALL, __signed__, = T_signed)
+S(_C99|_GNUC, _Complex, )
+S(_ALL, __complex__, = T__Complex)
+S(_ALL, __complex, = T__Complex)
+S(_C99|_GNUC, _Imaginary, )
+S(_ALL, __real__, )
+S(_ALL, __real, = T___real__)
+S(_ALL, __imag__, )
+S(_ALL, __imag, = T___imag__)
+S(_ALL, __alignof__, )
+S(_ALL, __alignof, = T___alignof__)
+S(_MS, _alignof, = T___alignof__)
+S(_ANSI|_C99|_CXX, const, )
+S(_ALL, __const, = T_const)
+S(_ALL, __const__, = T_const)
+S(_C99, restrict, )
+S(_ALL, __restrict__, = T_restrict)
+S(_ALL, __restrict, = T_restrict)
+S(_MS, _restrict, = T_restrict)
+S(_ALL, asm, )
+S(_ALL, __asm__, = T_asm)
+S(_MS, _asm, = T_asm)
+S(_ALL, __asm, = T_asm)
+S(_ANSI|_C99|_CXX, volatile, )
+S(_ALL, __volatile, = T_volatile)
+S(_ALL, __volatile__, = T_volatile)
+S(_C99|_CXX, inline, )
+S(_ALL, __inline, = T_inline)
+S(_ALL, __inline__, = T_inline)
+S(_GNUC, typeof, )
+S(_ALL, __typeof, = T_typeof)
+S(_ALL, __typeof__, = T_typeof)
+S(_ALL, __attribute__, )
+
+S(_ALL, __builtin_va_start, )
+S(_ALL, __builtin_stdarg_start, = T___builtin_va_start)