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" );