#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 __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().
| int q_atomic_decrement | ( | volatile int * | ptr | ) | [inline] |
| int q_atomic_increment | ( | volatile int * | ptr | ) | [inline] |
| 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 }
1.5.1