"       and     %2, %0, %3                              \n"
                "       .set    pop                                     \n"
                : "=&r" (temp), "+m" (*m), "=&r" (res)
-               : "r" (1UL << bit)
+               : "ir" (1UL << bit)
                : __LLSC_CLOBBER);
        } else {
                loongson_llsc_mb();
                        "       " __SC  "%2, %1                         \n"
                        "       .set    pop                             \n"
                        : "=&r" (temp), "+" GCC_OFF_SMALL_ASM() (*m), "=&r" (res)
-                       : "r" (1UL << bit)
+                       : "ir" (1UL << bit)
                        : __LLSC_CLOBBER);
                } while (unlikely(!res));
 
                "       and     %2, %0, %3                              \n"
                "       .set    pop                                     \n"
                : "=&r" (temp), "+" GCC_OFF_SMALL_ASM() (*m), "=&r" (res)
-               : "r" (1UL << bit)
+               : "ir" (1UL << bit)
                : __LLSC_CLOBBER);
        } else if ((MIPS_ISA_REV >= 2) && __builtin_constant_p(nr)) {
                loongson_llsc_mb();
                        "       " __SC  "%2, %1                         \n"
                        "       .set    pop                             \n"
                        : "=&r" (temp), "+" GCC_OFF_SMALL_ASM() (*m), "=&r" (res)
-                       : "r" (1UL << bit)
+                       : "ir" (1UL << bit)
                        : __LLSC_CLOBBER);
                } while (unlikely(!res));
 
                "       and     %2, %0, %3                              \n"
                "       .set    pop                                     \n"
                : "=&r" (temp), "+" GCC_OFF_SMALL_ASM() (*m), "=&r" (res)
-               : "r" (1UL << bit)
+               : "ir" (1UL << bit)
                : __LLSC_CLOBBER);
        } else {
                loongson_llsc_mb();
                        "       " __SC  "\t%2, %1                       \n"
                        "       .set    pop                             \n"
                        : "=&r" (temp), "+" GCC_OFF_SMALL_ASM() (*m), "=&r" (res)
-                       : "r" (1UL << bit)
+                       : "ir" (1UL << bit)
                        : __LLSC_CLOBBER);
                } while (unlikely(!res));