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