diff --git a/valgrind-3.15.0-gcc10-ppc64-asm-constraints.patch b/valgrind-3.15.0-gcc10-ppc64-asm-constraints.patch
new file mode 100644
index 0000000..c12dc12
--- /dev/null
+++ b/valgrind-3.15.0-gcc10-ppc64-asm-constraints.patch
@@ -0,0 +1,89 @@
+diff --git a/none/tests/ppc64/test_isa_2_07_part1.c b/none/tests/ppc64/test_isa_2_07_part1.c
+index 187af3741..0efd39c1c 100644
+--- a/none/tests/ppc64/test_isa_2_07_part1.c
++++ b/none/tests/ppc64/test_isa_2_07_part1.c
+@@ -384,27 +384,27 @@ static void test_fmrgow (void)
+ // VSX move instructions
+ static void test_mfvsrd (void)
+ {
+-   __asm__ __volatile__ ("mfvsrd %0,%x1" : "=r" (r14) : "ws" (vec_inA));
++   __asm__ __volatile__ ("mfvsrd %0,%x1" : "=r" (r14) : "wa" (vec_inA));
+ };
+ 
+ static void test_mfvsrwz (void)
+ {
+-   __asm__ __volatile__ ("mfvsrwz %0,%x1" : "=r" (r14) : "ws" (vec_inA));
++   __asm__ __volatile__ ("mfvsrwz %0,%x1" : "=r" (r14) : "wa" (vec_inA));
+ };
+ 
+ static void test_mtvsrd (void)
+ {
+-   __asm__ __volatile__ ("mtvsrd %x0,%1" : "=ws" (vec_out) : "r" (r14));
++   __asm__ __volatile__ ("mtvsrd %x0,%1" : "=wa" (vec_out) : "r" (r14));
+ };
+ 
+ static void test_mtvsrwz (void)
+ {
+-   __asm__ __volatile__ ("mtvsrwz %x0,%1" : "=ws" (vec_out) : "r" (r14));
++   __asm__ __volatile__ ("mtvsrwz %x0,%1" : "=wa" (vec_out) : "r" (r14));
+ };
+ 
+ static void test_mtvsrwa (void)
+ {
+-   __asm__ __volatile__ ("mtvsrwa %x0,%1" : "=ws" (vec_out) : "r" (r14));
++   __asm__ __volatile__ ("mtvsrwa %x0,%1" : "=wa" (vec_out) : "r" (r14));
+ };
+ 
+ static void test_mtfprwa (void)
+diff --git a/none/tests/ppc64/test_isa_3_0.c b/none/tests/ppc64/test_isa_3_0.c
+index 78b5130c1..cf9df8ac9 100644
+--- a/none/tests/ppc64/test_isa_3_0.c
++++ b/none/tests/ppc64/test_isa_3_0.c
+@@ -1177,23 +1177,23 @@ static void test_xscmpexpdp(void) {
+ }
+ 
+ static void test_xscmpeqdp(void) {
+-   __asm__ __volatile__ ("xscmpeqdp   %x0, %x1, %x2 " : "+wa" (vec_xt): "ww" (vec_xa), "ww" (vec_xb));
++   __asm__ __volatile__ ("xscmpeqdp   %x0, %x1, %x2 " : "+wa" (vec_xt): "wa" (vec_xa), "wa" (vec_xb));
+ }
+ 
+ static void test_xscmpgtdp(void) {
+-   __asm__ __volatile__ ("xscmpgtdp   %x0, %x1, %x2 " : "+wa" (vec_xt): "ww" (vec_xa), "ww" (vec_xb));
++   __asm__ __volatile__ ("xscmpgtdp   %x0, %x1, %x2 " : "+wa" (vec_xt): "wa" (vec_xa), "wa" (vec_xb));
+ }
+ 
+ static void test_xscmpgedp(void) {
+-   __asm__ __volatile__ ("xscmpgedp   %x0, %x1, %x2 " : "+wa" (vec_xt): "ww" (vec_xa), "ww" (vec_xb));
++   __asm__ __volatile__ ("xscmpgedp   %x0, %x1, %x2 " : "+wa" (vec_xt): "wa" (vec_xa), "wa" (vec_xb));
+ }
+ 
+ static void test_xsmincdp(void) {
+-   __asm__ __volatile__ ("xsmincdp   %x0, %x1, %x2 " : "+wa" (vec_xt): "ww" (vec_xa), "ww" (vec_xb));
++   __asm__ __volatile__ ("xsmincdp   %x0, %x1, %x2 " : "+wa" (vec_xt): "wa" (vec_xa), "wa" (vec_xb));
+ }
+ 
+ static void test_xsmaxcdp(void) {
+-   __asm__ __volatile__ ("xsmaxcdp   %x0, %x1, %x2 " : "+wa" (vec_xt): "ww" (vec_xa), "ww" (vec_xb));
++   __asm__ __volatile__ ("xsmaxcdp   %x0, %x1, %x2 " : "+wa" (vec_xt): "wa" (vec_xa), "wa" (vec_xb));
+ }
+ 
+ static test_list_t testgroup_vector_scalar_compare_double[] = {
+@@ -1827,15 +1827,15 @@ static void test_xscvhpdp(void) {
+ }
+ 
+ static void test_xscvdphp(void) {
+-   __asm__ __volatile__ ("xscvdphp %x0, %x1 " : "+wi" (vec_xt) : "wi" (vec_xb));
++   __asm__ __volatile__ ("xscvdphp %x0, %x1 " : "+wa" (vec_xt) : "wa" (vec_xb));
+ }
+ 
+ static void test_xvcvhpsp(void) {
+-   __asm__ __volatile__ ("xvcvhpsp %x0, %x1 " : "+ww" (vec_xt) : "ww" (vec_xb));
++   __asm__ __volatile__ ("xvcvhpsp %x0, %x1 " : "+wa" (vec_xt) : "wa" (vec_xb));
+ }
+ 
+ static void test_xvcvsphp(void) {
+-   __asm__ __volatile__ ("xvcvsphp %x0, %x1 " : "+ww" (vec_xt) : "ww" (vec_xb));
++   __asm__ __volatile__ ("xvcvsphp %x0, %x1 " : "+wa" (vec_xt) : "wa" (vec_xb));
+ }
+ 
+ static test_list_t testgroup_vector_scalar_two_double[] = {
diff --git a/valgrind.spec b/valgrind.spec
index ddb4cf6..59283e9 100644
--- a/valgrind.spec
+++ b/valgrind.spec
@@ -3,7 +3,7 @@
 Summary: Tool for finding memory management bugs in programs
 Name: %{?scl_prefix}valgrind
 Version: 3.15.0
-Release: 13%{?dist}
+Release: 14%{?dist}
 Epoch: 1
 License: GPLv2+
 URL: http://www.valgrind.org/
@@ -140,8 +140,12 @@ Patch20: valgrind-3.15.0-ptrace-siginfo.patch
 Patch21: valgrind-3.15.0-gcc-10-typedef-enum.patch
 
 # GCC10 build error bad asm on i686
+# Upstream commit 2dab3249867615055a680cad7fccb22411587579
 Patch22: valgrind-3.15.0-gcc-10-i686-asm-test.patch
 
+# KDE#416667 gcc10 ppc64le impossible constraint in 'asm' in test_isa
+Patch23: valgrind-3.15.0-gcc10-ppc64-asm-constraints.patch
+
 BuildRequires: glibc-devel
 
 %if %{build_openmpi}
@@ -300,6 +304,7 @@ Valgrind User Manual for details.
 %patch20 -p1
 %patch21 -p1
 %patch22 -p1
+%patch23 -p1
 
 %build
 
@@ -520,8 +525,9 @@ fi
 %endif
 
 %changelog
-* Fri Jan 24 2020 Mark Wielaard <mjw@fedoraproject.org>
+* Fri Jan 24 2020 Mark Wielaard <mjw@fedoraproject.org> 3.15.0-14
 - Add valgrind-3.15.0-gcc-10-i686-asm-test.patch
+- Add valgrind-3.15.0-gcc10-ppc64-asm-constraints.patch
 
 * Thu Jan 23 2020 Mark Wielaard <mjw@fedoraproject.org> - 3.15.0-13
 - Add valgrind-3.15.0-gcc-10-typedef-enum.patch