+++ /dev/null
---- mono-1.1.8.3/mono/io-layer/atomic.h.orig 2005-05-30 22:19:57.000000000 +0200
-+++ mono-1.1.8.3/mono/io-layer/atomic.h 2005-09-03 08:49:48.556163120 +0200
-@@ -689,6 +689,117 @@
- return old;
- }
-
-+#elif defined(__alpha__)
-+#define WAPI_ATOMIC_ASM
-+
-+static inline gint32 InterlockedCompareExchange(volatile gint32 *dest,
-+ gint32 exch, gint32 comp)
-+{
-+ gint32 old, temp, temp2;
-+ long compq = comp, exchq = exch;
-+
-+ __asm__ __volatile__ (
-+ "1: ldl_l %2, %0\n"
-+ " mov %2, %1\n"
-+ " cmpeq %2, %5, %3\n"
-+ " cmovne %3, %4, %2\n"
-+ " stl_c %2, %0\n"
-+ " beq %2, 1b\n"
-+ : "=m" (*dest), "=&r" (old), "=&r" (temp), "=&r" (temp2)
-+ : "r" (exchq), "r" (compq), "m" (*dest));
-+ return(old);
-+}
-+
-+static inline gpointer InterlockedCompareExchangePointer(volatile gpointer *dest, gpointer exch, gpointer comp)
-+{
-+ gpointer old, temp, temp2;
-+
-+ __asm__ __volatile__ (
-+ "1: ldq_l %2, %0\n"
-+ " mov %2, %1\n"
-+ " cmpeq %2, %5, %3\n"
-+ " cmovne %3, %4, %2\n"
-+ " stq_c %2, %0\n"
-+ " beq %2, 1b\n"
-+ : "=m" (*dest), "=&r" (old), "=&r" (temp), "=&r" (temp2)
-+ : "r" (exch), "r" (comp), "m" (*dest));
-+ return(old);
-+}
-+
-+static inline gint32 InterlockedIncrement(volatile gint32 *val)
-+{
-+ gint32 temp, cur;
-+
-+ __asm__ __volatile__ (
-+ "1: ldl_l %0, %1\n"
-+ " addl %0, %3, %0\n"
-+ " mov %0, %2\n"
-+ " stl_c %0, %1\n"
-+ " beq %0, 1b\n"
-+ : "=&r" (temp), "=m" (*val), "=r" (cur)
-+ : "Ir" (1), "m" (*val));
-+ return(cur);
-+}
-+
-+static inline gint32 InterlockedDecrement(volatile gint32 *val)
-+{
-+ gint32 temp, cur;
-+
-+ __asm__ __volatile__ (
-+ "1: ldl_l %0, %1\n"
-+ " addl %0, %3, %0\n"
-+ " mov %0, %2\n"
-+ " stl_c %0, %1\n"
-+ " beq %0, 1b\n"
-+ : "=&r" (temp), "=m" (*val), "=r" (cur)
-+ : "Ir" (-1), "m" (*val));
-+ return(cur);
-+}
-+
-+static inline gint32 InterlockedExchange(volatile gint32 *val, gint32 new_val)
-+{
-+ gint32 ret, temp;
-+
-+ __asm__ __volatile__ (
-+ "1: ldl_l %1, %0\n"
-+ " mov %3, %2\n"
-+ " stl_c %2, %0\n"
-+ " beq %2, 1b\n"
-+ : "=m" (*val), "=&r" (ret), "=&r" (temp)
-+ : "r" (new_val), "m" (*val));
-+ return(ret);
-+}
-+
-+static inline gpointer InterlockedExchangePointer(volatile gpointer *val, gpointer new_val)
-+{
-+ gpointer ret, temp;
-+
-+ __asm__ __volatile__ (
-+ "1: ldq_l %1, %0\n"
-+ " mov %3, %2\n"
-+ " stq_c %2, %0\n"
-+ " beq %2, 1b\n"
-+ : "=m" (*val), "=&r" (ret), "=&r" (temp)
-+ : "r" (new_val), "m" (*val));
-+ return(ret);
-+}
-+
-+static inline gint32 InterlockedExchangeAdd(volatile gint32 *val, gint32 add)
-+{
-+ gint32 ret, temp;
-+
-+ __asm__ __volatile__ (
-+ "1: ldl_l %2, %0\n"
-+ " mov %2, %1\n"
-+ " addl %2, %3, %2\n"
-+ " stl_c %2, %0\n"
-+ " beq %2, 1b\n"
-+ : "=m" (*val), "=&r" (ret), "=&r" (temp)
-+ : "r" (add), "m" (*val));
-+
-+ return(ret);
-+}
-+
- #else
-
- extern gint32 InterlockedCompareExchange(volatile gint32 *dest, gint32 exch, gint32 comp);