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