|
@@ -245,16 +245,16 @@ static inline void arch_read_lock(arch_rwlock_t *rw)
|
|
__asm__ __volatile__(
|
|
__asm__ __volatile__(
|
|
" .set noreorder # arch_read_lock \n"
|
|
" .set noreorder # arch_read_lock \n"
|
|
"1: ll %1, %2 \n"
|
|
"1: ll %1, %2 \n"
|
|
- " bltz %1, 2f \n"
|
|
|
|
|
|
+ " bltz %1, 3f \n"
|
|
" addu %1, 1 \n"
|
|
" addu %1, 1 \n"
|
|
- " sc %1, %0 \n"
|
|
|
|
|
|
+ "2: sc %1, %0 \n"
|
|
" beqz %1, 1b \n"
|
|
" beqz %1, 1b \n"
|
|
" nop \n"
|
|
" nop \n"
|
|
" .subsection 2 \n"
|
|
" .subsection 2 \n"
|
|
- "2: ll %1, %2 \n"
|
|
|
|
- " bltz %1, 2b \n"
|
|
|
|
|
|
+ "3: ll %1, %2 \n"
|
|
|
|
+ " bltz %1, 3b \n"
|
|
" addu %1, 1 \n"
|
|
" addu %1, 1 \n"
|
|
- " b 1b \n"
|
|
|
|
|
|
+ " b 2b \n"
|
|
" nop \n"
|
|
" nop \n"
|
|
" .previous \n"
|
|
" .previous \n"
|
|
" .set reorder \n"
|
|
" .set reorder \n"
|
|
@@ -324,16 +324,16 @@ static inline void arch_write_lock(arch_rwlock_t *rw)
|
|
__asm__ __volatile__(
|
|
__asm__ __volatile__(
|
|
" .set noreorder # arch_write_lock \n"
|
|
" .set noreorder # arch_write_lock \n"
|
|
"1: ll %1, %2 \n"
|
|
"1: ll %1, %2 \n"
|
|
- " bnez %1, 2f \n"
|
|
|
|
|
|
+ " bnez %1, 3f \n"
|
|
" lui %1, 0x8000 \n"
|
|
" lui %1, 0x8000 \n"
|
|
- " sc %1, %0 \n"
|
|
|
|
- " beqz %1, 2f \n"
|
|
|
|
|
|
+ "2: sc %1, %0 \n"
|
|
|
|
+ " beqz %1, 3f \n"
|
|
" nop \n"
|
|
" nop \n"
|
|
" .subsection 2 \n"
|
|
" .subsection 2 \n"
|
|
- "2: ll %1, %2 \n"
|
|
|
|
- " bnez %1, 2b \n"
|
|
|
|
|
|
+ "3: ll %1, %2 \n"
|
|
|
|
+ " bnez %1, 3b \n"
|
|
" lui %1, 0x8000 \n"
|
|
" lui %1, 0x8000 \n"
|
|
- " b 1b \n"
|
|
|
|
|
|
+ " b 2b \n"
|
|
" nop \n"
|
|
" nop \n"
|
|
" .previous \n"
|
|
" .previous \n"
|
|
" .set reorder \n"
|
|
" .set reorder \n"
|