MIPS: bitops: ins start position is always an immediate
The start position for an ins instruction is always encoded as an immediate, so allowing registers to be used by the inline asm makes no sense. It should never happen anyway since a bit index should always be small enough to be treated as an immediate, but remove the nonsensical "r" for sanity. Signed-off-by: Paul Burton <paul.burton@mips.com> Cc: linux-mips@vger.kernel.org Cc: Huacai Chen <chenhc@lemote.com> Cc: Jiaxun Yang <jiaxun.yang@flygoat.com> Cc: linux-kernel@vger.kernel.org
This commit is contained in:
parent
59361e9975
commit
27aab27259
|
@ -85,7 +85,7 @@ static inline void set_bit(unsigned long nr, volatile unsigned long *addr)
|
|||
" " __INS "%0, %3, %2, 1 \n"
|
||||
" " __SC "%0, %1 \n"
|
||||
: "=&r" (temp), "+" GCC_OFF_SMALL_ASM() (*m)
|
||||
: "ir" (bit), "r" (~0)
|
||||
: "i" (bit), "r" (~0)
|
||||
: __LLSC_CLOBBER);
|
||||
} while (unlikely(!temp));
|
||||
return;
|
||||
|
@ -150,7 +150,7 @@ static inline void clear_bit(unsigned long nr, volatile unsigned long *addr)
|
|||
" " __INS "%0, $0, %2, 1 \n"
|
||||
" " __SC "%0, %1 \n"
|
||||
: "=&r" (temp), "+" GCC_OFF_SMALL_ASM() (*m)
|
||||
: "ir" (bit)
|
||||
: "i" (bit)
|
||||
: __LLSC_CLOBBER);
|
||||
} while (unlikely(!temp));
|
||||
return;
|
||||
|
@ -383,7 +383,7 @@ static inline int test_and_clear_bit(unsigned long nr,
|
|||
" " __INS "%0, $0, %3, 1 \n"
|
||||
" " __SC "%0, %1 \n"
|
||||
: "=&r" (temp), "+" GCC_OFF_SMALL_ASM() (*m), "=&r" (res)
|
||||
: "ir" (bit)
|
||||
: "i" (bit)
|
||||
: __LLSC_CLOBBER);
|
||||
} while (unlikely(!temp));
|
||||
} else {
|
||||
|
|
Loading…
Reference in New Issue