#include <asm/asm.h>
 #include <asm/cmpxchg.h>
 #include <asm/compiler.h>
-#include <asm/war.h>
+#include <asm/asm.h>
 
 typedef struct
 {
 {
        unsigned long result;
 
-       if (kernel_uses_llsc && IS_ENABLED(CONFIG_WAR_R10000_LLSC)) {
-               unsigned long temp;
-
-               __asm__ __volatile__(
-               "       .set    push                                    \n"
-               "       .set    arch=r4000                              \n"
-                       __SYNC(full, loongson3_war) "                   \n"
-               "1:"    __LL    "%1, %2         # local_add_return      \n"
-                       __stringify(LONG_ADDU)  "       %0, %1, %3      \n"
-                       __SC    "%0, %2                                 \n"
-               "       beqzl   %0, 1b                                  \n"
-               "       addu    %0, %1, %3                              \n"
-               "       .set    pop                                     \n"
-               : "=&r" (result), "=&r" (temp), "=m" (l->a.counter)
-               : "Ir" (i), "m" (l->a.counter)
-               : "memory");
-       } else if (kernel_uses_llsc) {
+       if (kernel_uses_llsc) {
                unsigned long temp;
 
                __asm__ __volatile__(
                "       .set    push                                    \n"
                "       .set    "MIPS_ISA_ARCH_LEVEL"                   \n"
-                       __SYNC(full, loongson3_war) "                   \n"
-               "1:"    __LL    "%1, %2         # local_add_return      \n"
+                       __SYNC(full, loongson3_war) "                   \n"
+               "1:"    __stringify(LONG_LL)    "       %1, %2          \n"
+                       __stringify(LONG_ADDU)  "       %0, %1, %3      \n"
+                       __stringify(LONG_SC)    "       %0, %2          \n"
+                       __stringify(SC_BEQZ)    "       %0, 1b          \n"
                        __stringify(LONG_ADDU)  "       %0, %1, %3      \n"
-                       __SC    "%0, %2                                 \n"
-               "       beqz    %0, 1b                                  \n"
-               "       addu    %0, %1, %3                              \n"
                "       .set    pop                                     \n"
                : "=&r" (result), "=&r" (temp), "=m" (l->a.counter)
                : "Ir" (i), "m" (l->a.counter)
 {
        unsigned long result;
 
-       if (kernel_uses_llsc && IS_ENABLED(CONFIG_WAR_R10000_LLSC)) {
-               unsigned long temp;
-
-               __asm__ __volatile__(
-               "       .set    push                                    \n"
-               "       .set    arch=r4000                              \n"
-                       __SYNC(full, loongson3_war) "                   \n"
-               "1:"    __LL    "%1, %2         # local_sub_return      \n"
-                       __stringify(LONG_SUBU)  "       %0, %1, %3      \n"
-                       __SC    "%0, %2                                 \n"
-               "       beqzl   %0, 1b                                  \n"
-               "       subu    %0, %1, %3                              \n"
-               "       .set    pop                                     \n"
-               : "=&r" (result), "=&r" (temp), "=m" (l->a.counter)
-               : "Ir" (i), "m" (l->a.counter)
-               : "memory");
-       } else if (kernel_uses_llsc) {
+       if (kernel_uses_llsc) {
                unsigned long temp;
 
                __asm__ __volatile__(
                "       .set    push                                    \n"
                "       .set    "MIPS_ISA_ARCH_LEVEL"                   \n"
-                       __SYNC(full, loongson3_war) "                   \n"
-               "1:"    __LL    "%1, %2         # local_sub_return      \n"
+                       __SYNC(full, loongson3_war) "                   \n"
+               "1:"    __stringify(LONG_LL)    "       %1, %2          \n"
+                       __stringify(LONG_SUBU)  "       %0, %1, %3      \n"
+                       __stringify(LONG_SUBU)  "       %0, %1, %3      \n"
+                       __stringify(LONG_SC)    "       %0, %2          \n"
+                       __stringify(SC_BEQZ)    "       %0, 1b          \n"
                        __stringify(LONG_SUBU)  "       %0, %1, %3      \n"
-                       __SC    "%0, %2                                 \n"
-               "       beqz    %0, 1b                                  \n"
-               "       subu    %0, %1, %3                              \n"
                "       .set    pop                                     \n"
                : "=&r" (result), "=&r" (temp), "=m" (l->a.counter)
                : "Ir" (i), "m" (l->a.counter)