64
64
static inline void __down_read (struct rw_semaphore * sem )
65
65
{
66
66
asm volatile ("# beginning down_read\n\t"
67
- LOCK_PREFIX _ASM_INC "(%1 )\n\t"
67
+ LOCK_PREFIX _ASM_INC "(%[sem] )\n\t"
68
68
/* adds 0x00000001 */
69
69
" jns 1f\n"
70
70
" call call_rwsem_down_read_failed\n"
71
71
"1:\n\t"
72
72
"# ending down_read\n\t"
73
73
: "+m" (sem -> count )
74
- : "a" (sem )
74
+ : [ sem ] "a" (sem )
75
75
: "memory" , "cc" );
76
76
}
77
77
@@ -82,17 +82,18 @@ static inline bool __down_read_trylock(struct rw_semaphore *sem)
82
82
{
83
83
long result , tmp ;
84
84
asm volatile ("# beginning __down_read_trylock\n\t"
85
- " mov %0,%1 \n\t"
85
+ " mov %[count],%[result] \n\t"
86
86
"1:\n\t"
87
- " mov %1,%2 \n\t"
88
- " add %3,%2 \n\t"
87
+ " mov %[result],%[tmp] \n\t"
88
+ " add %[inc],%[tmp] \n\t"
89
89
" jle 2f\n\t"
90
- LOCK_PREFIX " cmpxchg %2,%0 \n\t"
90
+ LOCK_PREFIX " cmpxchg %[tmp],%[count] \n\t"
91
91
" jnz 1b\n\t"
92
92
"2:\n\t"
93
93
"# ending __down_read_trylock\n\t"
94
- : "+m" (sem -> count ), "=&a" (result ), "=&r" (tmp )
95
- : "i" (RWSEM_ACTIVE_READ_BIAS )
94
+ : [count ] "+m" (sem -> count ), [result ] "=&a" (result ),
95
+ [tmp ] "=&r" (tmp )
96
+ : [inc ] "i" (RWSEM_ACTIVE_READ_BIAS )
96
97
: "memory" , "cc" );
97
98
return result >= 0 ;
98
99
}
@@ -106,17 +107,17 @@ static inline bool __down_read_trylock(struct rw_semaphore *sem)
106
107
struct rw_semaphore* ret; \
107
108
\
108
109
asm volatile("# beginning down_write\n\t" \
109
- LOCK_PREFIX " xadd %1 ,(%4 )\n\t" \
110
+ LOCK_PREFIX " xadd %[tmp] ,(%[sem] )\n\t" \
110
111
/* adds 0xffff0001, returns the old value */ \
111
112
" test " __ASM_SEL (%w1 ,%k1 ) "," __ASM_SEL(%w1,%k1) " \n \t " \
112
113
/* was the active mask 0 before? */\
113
114
" jz 1f \n " \
114
115
" call " slow_path " \n " \
115
116
" 1 :\n " \
116
117
" # ending down_write" \
117
- : "+m" (sem->count), "=d" (tmp), \
118
+ : "+m" (sem->count), [tmp] "=d" (tmp), \
118
119
"=a" (ret), ASM_CALL_CONSTRAINT \
119
- : "a" (sem), "1 " (RWSEM_ACTIVE_WRITE_BIAS) \
120
+ : [sem] "a" (sem), "[tmp] " (RWSEM_ACTIVE_WRITE_BIAS) \
120
121
: "memory", "cc"); \
121
122
ret; \
122
123
})
@@ -142,21 +143,21 @@ static inline bool __down_write_trylock(struct rw_semaphore *sem)
142
143
bool result ;
143
144
long tmp0 , tmp1 ;
144
145
asm volatile ("# beginning __down_write_trylock\n\t"
145
- " mov %0,%1 \n\t"
146
+ " mov %[count],%[tmp0] \n\t"
146
147
"1:\n\t"
147
148
" test " __ASM_SEL (%w1 ,%k1 ) "," __ASM_SEL(%w1,%k1) " \n \t "
148
149
/* was the active mask 0 before? */
149
150
" jnz 2f \n \t "
150
- " mov %1 ,% 2 \n \t "
151
- " add %4,%2 \n\t"
152
- LOCK_PREFIX " cmpxchg %2,%0 \n\t"
151
+ " mov %[ tmp0 ],%[ tmp1 ] \n \t "
152
+ " add %[ inc ],%[ tmp1 ] \n \t "
153
+ LOCK_PREFIX " cmpxchg %[tmp1],%[count] \n\t"
153
154
" jnz 1b\n\t"
154
155
"2:\n\t"
155
156
CC_SET (e )
156
157
"# ending __down_write_trylock\n\t"
157
- : "+m" (sem -> count ), "=&a" ( tmp0 ), "=&r " (tmp1 ),
158
- CC_OUT (e ) (result )
159
- : "er" (RWSEM_ACTIVE_WRITE_BIAS )
158
+ : [ count ] "+ m " (sem->count), [ tmp0] " = & a " (tmp0 ),
159
+ [ tmp1 ] " = & r " (tmp1), CC_OUT(e) (result)
160
+ : [ inc ] "er" (RWSEM_ACTIVE_WRITE_BIAS )
160
161
: "memory ");
161
162
return result ;
162
163
}
@@ -168,14 +169,14 @@ static inline void __up_read(struct rw_semaphore *sem)
168
169
{
169
170
long tmp ;
170
171
asm volatile ("# beginning __up_read\n\t"
171
- LOCK_PREFIX " xadd %1 ,(%2 )\n\t"
172
+ LOCK_PREFIX " xadd %[tmp] ,(%[sem] )\n\t"
172
173
/* subtracts 1, returns the old value */
173
174
" jns 1f\n\t"
174
175
" call call_rwsem_wake\n" /* expects old value in %edx */
175
176
"1:\n"
176
177
"# ending __up_read\n"
177
- : "+m" (sem -> count ), "=d" (tmp )
178
- : "a" (sem ), "1 " (- RWSEM_ACTIVE_READ_BIAS )
178
+ : "+m" (sem -> count ), [ tmp ] "=d" (tmp )
179
+ : [ sem ] "a" (sem ), "[tmp] " (- RWSEM_ACTIVE_READ_BIAS )
179
180
: "memory" , "cc" );
180
181
}
181
182
@@ -186,14 +187,14 @@ static inline void __up_write(struct rw_semaphore *sem)
186
187
{
187
188
long tmp ;
188
189
asm volatile ("# beginning __up_write\n\t"
189
- LOCK_PREFIX " xadd %1 ,(%2 )\n\t"
190
+ LOCK_PREFIX " xadd %[tmp] ,(%[sem] )\n\t"
190
191
/* subtracts 0xffff0001, returns the old value */
191
192
" jns 1f\n\t"
192
193
" call call_rwsem_wake\n" /* expects old value in %edx */
193
194
"1:\n\t"
194
195
"# ending __up_write\n"
195
- : "+m" (sem -> count ), "=d" (tmp )
196
- : "a" (sem ), "1 " (- RWSEM_ACTIVE_WRITE_BIAS )
196
+ : "+m" (sem -> count ), [ tmp ] "=d" (tmp )
197
+ : [ sem ] "a" (sem ), "[tmp] " (- RWSEM_ACTIVE_WRITE_BIAS )
197
198
: "memory" , "cc" );
198
199
}
199
200
@@ -203,7 +204,7 @@ static inline void __up_write(struct rw_semaphore *sem)
203
204
static inline void __downgrade_write (struct rw_semaphore * sem )
204
205
{
205
206
asm volatile ("# beginning __downgrade_write\n\t"
206
- LOCK_PREFIX _ASM_ADD "%2 ,(%1 )\n\t"
207
+ LOCK_PREFIX _ASM_ADD "%[inc] ,(%[sem] )\n\t"
207
208
/*
208
209
* transitions 0xZZZZ0001 -> 0xYYYY0001 (i386)
209
210
* 0xZZZZZZZZ00000001 -> 0xYYYYYYYY00000001 (x86_64)
@@ -213,7 +214,7 @@ static inline void __downgrade_write(struct rw_semaphore *sem)
213
214
"1:\n\t"
214
215
"# ending __downgrade_write\n"
215
216
: "+m" (sem -> count )
216
- : "a" (sem ), "er" (- RWSEM_WAITING_BIAS )
217
+ : [ sem ] "a" (sem ), [ inc ] "er" (- RWSEM_WAITING_BIAS )
217
218
: "memory" , "cc" );
218
219
}
219
220
0 commit comments