From cc1d34f86240f72a75bc0313c1804088033a83bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ciro=20Santilli=20=E5=85=AD=E5=9B=9B=E4=BA=8B=E4=BB=B6=20?= =?UTF-8?q?=E6=B3=95=E8=BD=AE=E5=8A=9F?= Date: Mon, 13 Jan 2020 00:00:00 +0000 Subject: [PATCH] fix wfe_ldxr_* examples with sevl to make things more hardware independant --- README.adoc | 2 +- userland/arch/aarch64/inline_asm/wfe_ldxr_str.cpp | 2 +- userland/arch/aarch64/inline_asm/wfe_ldxr_stxr.cpp | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/README.adoc b/README.adoc index dc3e426..b7c4c0e 100644 --- a/README.adoc +++ b/README.adoc @@ -17523,7 +17523,7 @@ Also keep in mind that fused multiply add is FMADD. Examples at: xref:simd-assembly[xrefstyle=full] -===== ARMv8 aarch64 ld2 instruction +===== ARMv8 aarch64 LD2 instruction Example: link:userland/arch/aarch64/ld2.S[] diff --git a/userland/arch/aarch64/inline_asm/wfe_ldxr_str.cpp b/userland/arch/aarch64/inline_asm/wfe_ldxr_str.cpp index 3e1bee9..b08cc07 100644 --- a/userland/arch/aarch64/inline_asm/wfe_ldxr_str.cpp +++ b/userland/arch/aarch64/inline_asm/wfe_ldxr_str.cpp @@ -14,7 +14,7 @@ std::atomic_ulong done; int futex = 1; void myfunc() { - __asm__ __volatile__ ("ldxr x0, [%0];wfe;wfe" : : "r" (&futex) : "x0"); + __asm__ __volatile__ ("sevl;wfe;ldxr x0, [%0];wfe" : : "r" (&futex) : "x0"); done.store(futex); } diff --git a/userland/arch/aarch64/inline_asm/wfe_ldxr_stxr.cpp b/userland/arch/aarch64/inline_asm/wfe_ldxr_stxr.cpp index a2d63c6..fc29e67 100644 --- a/userland/arch/aarch64/inline_asm/wfe_ldxr_stxr.cpp +++ b/userland/arch/aarch64/inline_asm/wfe_ldxr_stxr.cpp @@ -14,7 +14,7 @@ std::atomic_ulong done; int futex = 1; void myfunc() { - __asm__ __volatile__ ("ldxr x0, [%0];wfe;wfe" : : "r" (&futex) : "x0"); + __asm__ __volatile__ ("sevl;wfe;ldxr x0, [%0];wfe" : : "r" (&futex) : "x0"); done.store(futex); } @@ -28,7 +28,7 @@ int main(int argc, char **argv) { thread = std::thread(myfunc); while (!done.load()) { if (do_sev) { - __asm__ __volatile__ ("mov x0, 1;ldxr x0, [%0];stxr w1, x0, [%0]" : : "r" (&futex) : "x0", "x1"); + __asm__ __volatile__ ("ldxr x0, [%0];mov x0, 1;stxr w1, x0, [%0]" : : "r" (&futex) : "x0", "x1"); } } thread.join();