summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/netlist/plib/ppmf.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/netlist/plib/ppmf.h')
-rw-r--r--src/lib/netlist/plib/ppmf.h48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/lib/netlist/plib/ppmf.h b/src/lib/netlist/plib/ppmf.h
index 8c8c6582579..4ff49911d63 100644
--- a/src/lib/netlist/plib/ppmf.h
+++ b/src/lib/netlist/plib/ppmf.h
@@ -41,6 +41,54 @@
*
*/
+//============================================================
+// Macro magic
+//============================================================
+
+//#define PPMF_TYPE 0
+
+#define PPMF_TYPE_PMF 0
+#define PPMF_TYPE_GNUC_PMF_CONV 1
+#define PPMF_TYPE_INTERNAL 2
+
+#if defined(__GNUC__)
+ /* does not work in versions over 4.7.x of 32bit MINGW */
+ #if defined(__MINGW32__) && !defined(__x86_64) && defined(__i386__) && ((__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 7)))
+ #define PHAS_PMF_INTERNAL 0
+ #elif defined(__MINGW32__) && !defined(__x86_64) && defined(__i386__)
+ #define PHAS_PMF_INTERNAL 1
+ #define MEMBER_ABI _thiscall
+ #elif defined(__clang__) && defined(__i386__) && defined(_WIN32)
+ #define PHAS_PMF_INTERNAL 0
+ #elif defined(__arm__) || defined(__ARMEL__) || defined(__aarch64__) || defined(__MIPSEL__) || defined(__mips_isa_rev) || defined(__mips64) || defined(__EMSCRIPTEN__)
+ #define PHAS_PMF_INTERNAL 2
+ #else
+ #define PHAS_PMF_INTERNAL 1
+ #endif
+#elif defined(_MSC_VER) && defined (_M_X64)
+ #define PHAS_PMF_INTERNAL 3
+#else
+ #define PHAS_PMF_INTERNAL 0
+#endif
+
+#ifndef MEMBER_ABI
+ #define MEMBER_ABI
+#endif
+
+#ifndef PPMF_TYPE
+ #if (PHAS_PMF_INTERNAL > 0)
+ #define PPMF_TYPE PPMF_TYPE_INTERNAL
+ #else
+ #define PPMF_TYPE PPMF_TYPE_PMF
+ #endif
+#else
+ #undef PHAS_PMF_INTERNAL
+ #define PHAS_PMF_INTERNAL 0
+ #undef MEMBER_ABI
+ #define MEMBER_ABI
+#endif
+
+
#if (PPMF_TYPE == PPMF_TYPE_GNUC_PMF_CONV)
#pragma GCC diagnostic ignored "-Wpmf-conversions"
#endif