static inline void arch_local_irq_enable(void)
 {
        u32 flags = CSR_CRMD_IE;
+       register u32 mask asm("t0") = CSR_CRMD_IE;
+
        __asm__ __volatile__(
                "csrxchg %[val], %[mask], %[reg]\n\t"
                : [val] "+r" (flags)
-               : [mask] "r" (CSR_CRMD_IE), [reg] "i" (LOONGARCH_CSR_CRMD)
+               : [mask] "r" (mask), [reg] "i" (LOONGARCH_CSR_CRMD)
                : "memory");
 }
 
 static inline void arch_local_irq_disable(void)
 {
        u32 flags = 0;
+       register u32 mask asm("t0") = CSR_CRMD_IE;
+
        __asm__ __volatile__(
                "csrxchg %[val], %[mask], %[reg]\n\t"
                : [val] "+r" (flags)
-               : [mask] "r" (CSR_CRMD_IE), [reg] "i" (LOONGARCH_CSR_CRMD)
+               : [mask] "r" (mask), [reg] "i" (LOONGARCH_CSR_CRMD)
                : "memory");
 }
 
 static inline unsigned long arch_local_irq_save(void)
 {
        u32 flags = 0;
+       register u32 mask asm("t0") = CSR_CRMD_IE;
+
        __asm__ __volatile__(
                "csrxchg %[val], %[mask], %[reg]\n\t"
                : [val] "+r" (flags)
-               : [mask] "r" (CSR_CRMD_IE), [reg] "i" (LOONGARCH_CSR_CRMD)
+               : [mask] "r" (mask), [reg] "i" (LOONGARCH_CSR_CRMD)
                : "memory");
        return flags;
 }
 
 static inline void arch_local_irq_restore(unsigned long flags)
 {
+       register u32 mask asm("t0") = CSR_CRMD_IE;
+
        __asm__ __volatile__(
                "csrxchg %[val], %[mask], %[reg]\n\t"
                : [val] "+r" (flags)
-               : [mask] "r" (CSR_CRMD_IE), [reg] "i" (LOONGARCH_CSR_CRMD)
+               : [mask] "r" (mask), [reg] "i" (LOONGARCH_CSR_CRMD)
                : "memory");
 }