From 3f1b57668e3d73944981d7bda194ca133f4660b7 Mon Sep 17 00:00:00 2001 From: Zhang Xianyi Date: Fri, 26 Jun 2015 11:54:41 +0800 Subject: [PATCH] Fix blas lock bug on AArch64. --- common_arm64.h | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/common_arm64.h b/common_arm64.h index ee13566f8..aa310c5f2 100644 --- a/common_arm64.h +++ b/common_arm64.h @@ -46,21 +46,22 @@ USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. static void __inline blas_lock(volatile BLASULONG *address){ int register ret; + int register tmp; do { while (*address) {YIELDING;}; __asm__ __volatile__( "1: \n\t" - "ldrex r2, [%1] \n\t" - "mov r2, #0 \n\t" - "strex r3, r2, [%1] \n\t" - "cmp r3, #0 \n\t" - "bne 1b \n\t" - "mov %0 , r3 \n\t" - : "=r"(ret), "=r"(address) + "ldaxr %2, [%1] \n\t" + "mov %2, #0 \n\t" + "stlxr %w0, %2, [%1] \n\t" + "cbnz %w0, 1b \n\t" + "mov %0 , #0 \n\t" + : "=r"(ret), "=r"(address), "=r"(tmp) : "1"(address) - : "memory", "r2" , "r3" + : "memory", "%w0" + //, "%r2" , "%r3" );