The increment of delay counter was 2 instructions:
Arithmatic Shfit Left (ASL) + set to 1 on overflow

This can be done in 1 using ROtate Left (ROL)

Suggested-by: Nigel Topham <ntop...@synopsys.com>
Cc: Peter Zijlstra (Intel) <pet...@infradead.org>
Cc: linux-kernel@vger.kernel.org
Signed-off-by: Vineet Gupta <vgu...@synopsys.com>
---
 arch/arc/include/asm/atomic.h   | 3 +--
 arch/arc/include/asm/spinlock.h | 3 +--
 2 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/arch/arc/include/asm/atomic.h b/arch/arc/include/asm/atomic.h
index 629dfd0a0c6b..87d18ae53115 100644
--- a/arch/arc/include/asm/atomic.h
+++ b/arch/arc/include/asm/atomic.h
@@ -34,8 +34,7 @@
        "       mov     %[tmp], %[delay]        \n"     /* tmp = delay */       
\
        "2:     brne.d  %[tmp], 0, 2b           \n"     /* while (tmp != 0) */  
\
        "       sub     %[tmp], %[tmp], 1       \n"     /* tmp-- */             
\
-       "       asl.f   %[delay], %[delay], 1   \n"     /* delay *= 2 */        
\
-       "       mov.z   %[delay], 1             \n"     /* handle overflow */   
\
+       "       rol     %[delay], %[delay]      \n"     /* delay *= 2 */        
\
        "       b       1b                      \n"     /* start over */        
\
        "4: ; --- success ---                   \n"                             
\
 
diff --git a/arch/arc/include/asm/spinlock.h b/arch/arc/include/asm/spinlock.h
index 7071fc0da56a..db8c59d1eaeb 100644
--- a/arch/arc/include/asm/spinlock.h
+++ b/arch/arc/include/asm/spinlock.h
@@ -260,8 +260,7 @@ static inline void arch_write_unlock(arch_rwlock_t *rw)
        "       mov     %[tmp], %[delay]        \n"     /* tmp = delay */       
\
        "2:     brne.d  %[tmp], 0, 2b           \n"     /* while (tmp != 0) */  
\
        "       sub     %[tmp], %[tmp], 1       \n"     /* tmp-- */             
\
-       "       asl.f   %[delay], %[delay], 1   \n"     /* delay *= 2 */        
\
-       "       mov.z   %[delay], 1             \n"     /* handle overflow */   
\
+       "       rol     %[delay], %[delay]      \n"     /* delay *= 2 */        
\
        "       b       1b                      \n"     /* start over */        
\
        "                                       \n"                             
\
        "4: ; --- done ---                      \n"                             
\
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to