+/*
+ * ILP32 uses a version of the ppc64 abi with sizeof(void*)==sizeof(long)==4.
+ * To support this, code needs to follow the following conventions:
+ * - for the size of a pointer use sizeof (gpointer)
+ * - for the size of a register/stack slot use SIZEOF_REGISTER.
+ * - for variables which contain values of registers, use mgreg_t.
+ * - for loading/saving pointers/ints, use the normal ppc_load_reg/ppc_save_reg ()
+ * macros.
+ * - for loading/saving register sized quantities, use the ppc_ldr/ppc_str
+ * macros.
+ * - make sure to not mix the two kinds of macros for the same memory location,
+ * since ppc is big endian, so a 8 byte store followed by a 4 byte load will
+ * load the upper 32 bit of the value.
+ * - use OP_LOADR_MEMBASE/OP_STORER_MEMBASE to load/store register sized
+ * quantities.
+ */
+
+#ifdef __mono_ppc64__
+#define MONO_ARCH_NO_EMULATE_LONG_SHIFT_OPS
+#define MONO_ARCH_NO_EMULATE_LONG_MUL_OPTS
+#define MONO_ARCH_HAVE_ATOMIC_ADD 1
+#define PPC_USES_FUNCTION_DESCRIPTOR
+
+#ifndef __mono_ilp32__
+#define MONO_ARCH_HAVE_TLS_GET 1
+#define MONO_ARCH_ENABLE_MONITOR_IL_FASTPATH 1
+#endif
+
+#else /* must be __mono_ppc__ */
+
+#if 0
+/* enabling this for PPC32 causes hangs in the thread/delegate tests.
+ So disable for now. */
+#if defined(__linux__)
+#define MONO_ARCH_ENABLE_MONITOR_IL_FASTPATH 1
+#endif
+#endif
+
+#define MONO_ARCH_HAVE_TLS_GET 1