]> git.pld-linux.org Git - packages/mono.git/commitdiff
- 1st try
authorJakub Bogusz <qboosh@pld-linux.org>
Sat, 3 Sep 2005 10:56:07 +0000 (10:56 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    mono-alpha-atomic.patch -> 1.1

mono-alpha-atomic.patch [new file with mode: 0644]

diff --git a/mono-alpha-atomic.patch b/mono-alpha-atomic.patch
new file mode 100644 (file)
index 0000000..ccac14d
--- /dev/null
@@ -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);
This page took 0.045132 seconds and 4 git commands to generate.