Author: qboosh                       Date: Sat Sep  3 10:56:12 2005 GMT
Module: SOURCES                       Tag: HEAD
---- Log message:
- 1st try

---- Files affected:
SOURCES:
   mono-alpha-atomic.patch (NONE -> 1.1)  (NEW)

---- Diffs:

================================================================
Index: SOURCES/mono-alpha-atomic.patch
diff -u /dev/null SOURCES/mono-alpha-atomic.patch:1.1
--- /dev/null   Sat Sep  3 12:56:12 2005
+++ SOURCES/mono-alpha-atomic.patch     Sat Sep  3 12:56:07 2005
@@ -0,0 +1,120 @@
+--- 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);
================================================================
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to