Use daddu/dsubu for long int on MIPS64. Signed-off-by: Huang Pei <huangpei@xxxxxxxxxxx> --- arch/mips/include/asm/llsc.h | 4 ++++ arch/mips/include/asm/local.h | 17 +++++++++-------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/arch/mips/include/asm/llsc.h b/arch/mips/include/asm/llsc.h index ec09fe5d6d6c..788e26ad7fca 100644 --- a/arch/mips/include/asm/llsc.h +++ b/arch/mips/include/asm/llsc.h @@ -16,11 +16,15 @@ #define __SC "sc " #define __INS "ins " #define __EXT "ext " +#define __ADDU "addu " +#define __SUBU "subu " #elif _MIPS_SZLONG == 64 #define __LL "lld " #define __SC "scd " #define __INS "dins " #define __EXT "dext " +#define __ADDU "daddu " +#define __SUBU "dsubu " #endif /* diff --git a/arch/mips/include/asm/local.h b/arch/mips/include/asm/local.h index ecda7295ddcd..3c6db82ee0a6 100644 --- a/arch/mips/include/asm/local.h +++ b/arch/mips/include/asm/local.h @@ -5,6 +5,7 @@ #include <linux/percpu.h> #include <linux/bitops.h> #include <linux/atomic.h> +#include <asm/asm.h> #include <asm/cmpxchg.h> #include <asm/compiler.h> #include <asm/war.h> @@ -39,10 +40,10 @@ static __inline__ long local_add_return(long i, local_t * l) " .set arch=r4000 \n" __SYNC(full, loongson3_war) " \n" "1:" __LL "%1, %2 # local_add_return \n" - " addu %0, %1, %3 \n" + __ADDU "%0, %1, %3 \n" __SC "%0, %2 \n" " beqzl %0, 1b \n" - " addu %0, %1, %3 \n" + __ADDU "%0, %1, %3 \n" " .set pop \n" : "=&r" (result), "=&r" (temp), "=m" (l->a.counter) : "Ir" (i), "m" (l->a.counter) @@ -55,10 +56,10 @@ static __inline__ long local_add_return(long i, local_t * l) " .set "MIPS_ISA_ARCH_LEVEL" \n" __SYNC(full, loongson3_war) " \n" "1:" __LL "%1, %2 # local_add_return \n" - " addu %0, %1, %3 \n" + __ADDU "%0, %1, %3 \n" __SC "%0, %2 \n" " beqz %0, 1b \n" - " addu %0, %1, %3 \n" + __ADDU "%0, %1, %3 \n" " .set pop \n" : "=&r" (result), "=&r" (temp), "=m" (l->a.counter) : "Ir" (i), "m" (l->a.counter) @@ -88,10 +89,10 @@ static __inline__ long local_sub_return(long i, local_t * l) " .set arch=r4000 \n" __SYNC(full, loongson3_war) " \n" "1:" __LL "%1, %2 # local_sub_return \n" - " subu %0, %1, %3 \n" + __SUBU "%0, %1, %3 \n" __SC "%0, %2 \n" " beqzl %0, 1b \n" - " subu %0, %1, %3 \n" + __SUBU "%0, %1, %3 \n" " .set pop \n" : "=&r" (result), "=&r" (temp), "=m" (l->a.counter) : "Ir" (i), "m" (l->a.counter) @@ -104,10 +105,10 @@ static __inline__ long local_sub_return(long i, local_t * l) " .set "MIPS_ISA_ARCH_LEVEL" \n" __SYNC(full, loongson3_war) " \n" "1:" __LL "%1, %2 # local_sub_return \n" - " subu %0, %1, %3 \n" + __SUBU "%0, %1, %3 \n" __SC "%0, %2 \n" " beqz %0, 1b \n" - " subu %0, %1, %3 \n" + __SUBU "%0, %1, %3 \n" " .set pop \n" : "=&r" (result), "=&r" (temp), "=m" (l->a.counter) : "Ir" (i), "m" (l->a.counter) -- 2.17.1