src/corelib/arch/qatomic_s390.h File Reference

#include <QtCore/qglobal.h>

Include dependency graph for qatomic_s390.h:

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Defines

#define __CS_LOOP(ptr, op_val, op_string)
#define __CS_OLD_LOOP(ptr, op_val, op_string)

Functions

int q_atomic_test_and_set_int (volatile int *ptr, int expected, int newval)
int q_atomic_test_and_set_acquire_int (volatile int *ptr, int expected, int newval)
int q_atomic_test_and_set_release_int (volatile int *ptr, int expected, int newval)
int q_atomic_test_and_set_ptr (volatile void *ptr, void *expected, void *newval)
int q_atomic_increment (volatile int *ptr)
int q_atomic_decrement (volatile int *ptr)
int q_atomic_set_int (volatile int *ptr, int newval)
void * q_atomic_set_ptr (volatile void *ptr, void *newval)


Define Documentation

#define __CS_LOOP ( ptr,
op_val,
op_string   ) 

Value:

({        \
  volatile int old_val, new_val;          \
        __asm__ __volatile__("   l     %0,0(%3)\n"      \
                             "0: lr    %1,%0\n"       \
                             op_string "  %1,%4\n"      \
                             "   cs    %0,%1,0(%3)\n"     \
                             "   jl    0b"        \
                             : "=&d" (old_val), "=&d" (new_val),  \
             "=m" (*ptr)  \
           : "a" (ptr), "d" (op_val),     \
             "m" (*ptr) \
           : "cc", "memory" );      \
  new_val;              \
})

Definition at line 31 of file qatomic_s390.h.

Referenced by q_atomic_decrement(), and q_atomic_increment().

#define __CS_OLD_LOOP ( ptr,
op_val,
op_string   ) 

Value:

({      \
  volatile int old_val, new_val;          \
        __asm__ __volatile__("   l     %0,0(%3)\n"      \
                             "0: lr    %1,%0\n"       \
                             op_string "  %1,%4\n"      \
                             "   cs    %0,%1,0(%3)\n"     \
                             "   jl    0b"        \
                             : "=&d" (old_val), "=&d" (new_val),  \
             "=m" (*ptr)  \
           : "a" (ptr), "d" (op_val),     \
             "m" (*ptr) \
           : "cc", "memory" );      \
  old_val;              \
})

Definition at line 46 of file qatomic_s390.h.

Referenced by q_atomic_set_int(), and q_atomic_set_ptr().


Function Documentation

int q_atomic_decrement ( volatile int *  ptr  )  [inline]

Definition at line 168 of file qatomic_s390.h.

References __CS_LOOP.

00169 { return __CS_LOOP(ptr, 1, "sr"); }

int q_atomic_increment ( volatile int *  ptr  )  [inline]

Definition at line 165 of file qatomic_s390.h.

References __CS_LOOP.

00166 { return __CS_LOOP(ptr, 1, "ar"); }

int q_atomic_set_int ( volatile int *  ptr,
int  newval 
) [inline]

Definition at line 171 of file qatomic_s390.h.

References __CS_OLD_LOOP.

00172 {
00173     return __CS_OLD_LOOP(ptr, newval, "lr");
00174 }

void* q_atomic_set_ptr ( volatile void *  ptr,
void *  newval 
) [inline]

Definition at line 176 of file qatomic_s390.h.

References __CS_OLD_LOOP.

00177 {
00178 #ifndef __s390x__
00179     return (void*)__CS_OLD_LOOP(reinterpret_cast<volatile long*>(ptr), (int)newval, "lr");
00180 #else
00181     return (void*)__CSG_OLD_LOOP(reinterpret_cast<volatile long*>(ptr), (long)newval, "lgr");
00182 #endif
00183 }

int q_atomic_test_and_set_acquire_int ( volatile int *  ptr,
int  expected,
int  newval 
) [inline]

Definition at line 96 of file qatomic_s390.h.

00097 {
00098         int retval;
00099 
00100         __asm__ __volatile__(
00101                 "  lr   %0,%3\n"
00102                 "  cs   %0,%4,0(%2)\n"
00103                 "  ipm  %0\n"
00104                 "  srl  %0,28\n"
00105                 "0:\n"
00106                 "  bcr 15,0\n"
00107                 : "=&d" (retval), "=m" (*ptr)
00108                 : "a" (ptr), "d" (expected) , "d" (newval),
00109       "m" (*ptr) : "cc", "memory" );
00110 
00111         if(retval) return 0;
00112         else return 1;
00113 }

int q_atomic_test_and_set_int ( volatile int *  ptr,
int  expected,
int  newval 
) [inline]

Definition at line 78 of file qatomic_s390.h.

00079 {
00080         int retval;
00081 
00082         __asm__ __volatile__(
00083                 "  lr   %0,%3\n"
00084                 "  cs   %0,%4,0(%2)\n"
00085                 "  ipm  %0\n"
00086                 "  srl  %0,28\n"
00087                 "0:"
00088                 : "=&d" (retval), "=m" (*ptr)
00089                 : "a" (ptr), "d" (expected) , "d" (newval),
00090       "m" (*ptr) : "cc", "memory" );
00091 
00092         if(retval) return 0;
00093         else return 1;
00094 }

int q_atomic_test_and_set_ptr ( volatile void *  ptr,
void *  expected,
void *  newval 
) [inline]

Definition at line 135 of file qatomic_s390.h.

00136 {
00137         int retval;
00138 
00139 #ifndef __s390x__
00140         __asm__ __volatile__(
00141                 "  lr   %0,%3\n"
00142                 "  cs   %0,%4,0(%2)\n"
00143                 "  ipm  %0\n"
00144                 "  srl  %0,28\n"
00145                 "0:"
00146                 : "=&d" (retval), "=m" (*reinterpret_cast<void * volatile *>(ptr))
00147                 : "a" (ptr), "d" (expected) , "d" (newval),
00148       "m" (*reinterpret_cast<void* volatile *>(ptr)) : "cc", "memory" );
00149 #else
00150         __asm__ __volatile__(
00151                 "  lgr   %0,%3\n"
00152                 "  csg   %0,%4,0(%2)\n"
00153                 "  ipm  %0\n"
00154                 "  srl  %0,28\n"
00155                 "0:"
00156                 : "=&d" (retval), "=m" (*reinterpret_cast<void * volatile *>(ptr))
00157                 : "a" (ptr), "d" (expected) , "d" (newval),
00158       "m" (*reinterpret_cast<void* volatile *>(ptr)) : "cc", "memory" );
00159 #endif
00160 
00161         if(retval) return 0;
00162         else return 1;
00163 }

int q_atomic_test_and_set_release_int ( volatile int *  ptr,
int  expected,
int  newval 
) [inline]

Definition at line 115 of file qatomic_s390.h.

00116 {
00117         int retval;
00118 
00119         __asm__ __volatile__(
00120                 "  bcr 15,0\n"
00121                 "  lr   %0,%3\n"
00122                 "  cs   %0,%4,0(%2)\n"
00123                 "  ipm  %0\n"
00124                 "  srl  %0,28\n"
00125                 "0:"
00126                 : "=&d" (retval), "=m" (*ptr)
00127                 : "a" (ptr), "d" (expected) , "d" (newval),
00128       "m" (*ptr) : "cc", "memory" );
00129 
00130         if(retval) return 0;
00131         else return 1;
00132 }


Generated on Thu Mar 15 12:18:21 2007 for Qt 4.2 User's Guide by  doxygen 1.5.1