From 8c07de2382659759daade933750da160ec1bf8ea Mon Sep 17 00:00:00 2001 From: chrisphi Date: Wed, 25 Apr 2018 12:21:29 -0400 Subject: [PATCH] 8201509: Zero: S390 31bit atomic_copy64 inline assembler is wrong Summary: The inline assembler for the S390 (S390 and not _LP64) has src and dst reversed thereby corrupting data Reviewed-by: shade Contributed-by: Martin Balao --- src/os_cpu/linux_zero/vm/os_linux_zero.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/os_cpu/linux_zero/vm/os_linux_zero.hpp b/src/os_cpu/linux_zero/vm/os_linux_zero.hpp index db9a2d34f..0f1ad1668 100644 --- a/src/os_cpu/linux_zero/vm/os_linux_zero.hpp +++ b/src/os_cpu/linux_zero/vm/os_linux_zero.hpp @@ -50,10 +50,10 @@ : "Q"(*(volatile long*)src)); #elif defined(S390) && !defined(_LP64) double tmp; - asm volatile ("ld %0, 0(%1)\n" - "std %0, 0(%2)\n" - : "=r"(tmp) - : "a"(src), "a"(dst)); + asm volatile ("ld %0, %2\n" + "std %0, %1\n" + : "=&f"(tmp), "=Q"(*(volatile double*)dst) + : "Q"(*(volatile double*)src)); #else *(jlong *) dst = *(jlong *) src; #endif -- GitLab