commit:     7671f48cefa3557d683fbaaed5ffb58130f53f32
Author:     Ron MacNeil <macro <AT> hotmail <DOT> com>
AuthorDate: Wed Aug  5 09:18:14 2015 +0000
Commit:     Heather Cynede <cynede <AT> gentoo <DOT> org>
CommitDate: Wed Aug  5 09:18:14 2015 +0000
URL:        https://gitweb.gentoo.org/proj/dotnet.git/commit/?id=7671f48c

mono-4.0.[23]: Add patch from mono git to fix atomic_add_i4 on 32-bit ppc

 .../files/mono-4.0.2.5-fix-ppc-atomic-add-i4.patch | 79 ++++++++++++++++++++++
 dev-lang/mono/mono-4.0.2.5.ebuild                  |  4 ++
 dev-lang/mono/mono-4.0.3.13.ebuild                 |  4 ++
 dev-lang/mono/mono-4.0.3.19.ebuild                 |  4 ++
 4 files changed, 91 insertions(+)

diff --git a/dev-lang/mono/files/mono-4.0.2.5-fix-ppc-atomic-add-i4.patch 
b/dev-lang/mono/files/mono-4.0.2.5-fix-ppc-atomic-add-i4.patch
new file mode 100755
index 0000000..fd5de72
--- /dev/null
+++ b/dev-lang/mono/files/mono-4.0.2.5-fix-ppc-atomic-add-i4.patch
@@ -0,0 +1,79 @@
+From f967c79926900343f399c75624deedaba460e544 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= <[email protected]>
+Date: Mon, 3 Aug 2015 17:32:07 +0200
+Subject: [PATCH 1/2] [ppc] Instruction length of atomic_add_i4 is 28.
+
+---
+ mono/mini/cpu-ppc.md | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/mono/mini/cpu-ppc.md b/mono/mini/cpu-ppc.md
+index ba2ec60..e6baf91 100644
+--- a/mono/mini/cpu-ppc.md
++++ b/mono/mini/cpu-ppc.md
+@@ -314,5 +314,5 @@ vcall2_membase: src1:b len:16 clob:c
+ 
+ jump_table: dest:i len:8
+ 
+-atomic_add_i4: src1:b src2:i dest:i len:20
++atomic_add_i4: src1:b src2:i dest:i len:28
+ atomic_cas_i4: src1:b src2:i src3:i dest:i len:38
+
+From 8f379f0c8f98493180b508b9e68b9aa76c0c5bdf Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Alex=20R=C3=B8nne=20Petersen?= <[email protected]>
+Date: Mon, 3 Aug 2015 17:32:31 +0200
+Subject: [PATCH 2/2] [ppc] Fix atomic_add_i4 support for 32-bit PPC.
+
+---
+ mono/mini/mini-ppc.c | 31 ++++++++++++++++---------------
+ 1 file changed, 16 insertions(+), 15 deletions(-)
+
+diff --git a/mono/mini/mini-ppc.c b/mono/mini/mini-ppc.c
+index 758a63f..06528bd 100644
+--- a/mono/mini/mini-ppc.c
++++ b/mono/mini/mini-ppc.c
+@@ -4420,6 +4420,22 @@ mono_arch_output_basic_block (MonoCompile *cfg, 
MonoBasicBlock *bb)
+                       else
+                               ppc_mr (code, ins->dreg, ins->sreg1);
+                       break;
++#else
++              case OP_ICONV_TO_R4:
++              case OP_ICONV_TO_R8: {
++                      if (cpu_hw_caps & PPC_ISA_64) {
++                              ppc_srawi(code, ppc_r0, ins->sreg1, 31);
++                              ppc_stw (code, ppc_r0, -8, ppc_r1);
++                              ppc_stw (code, ins->sreg1, -4, ppc_r1);
++                              ppc_lfd (code, ins->dreg, -8, ppc_r1);
++                              ppc_fcfid (code, ins->dreg, ins->dreg);
++                              if (ins->opcode == OP_ICONV_TO_R4)
++                                      ppc_frsp (code, ins->dreg, ins->dreg);
++                              }
++                      break;
++              }
++#endif
++
+               case OP_ATOMIC_ADD_I4:
+               CASE_PPC64 (OP_ATOMIC_ADD_I8) {
+                       int location = ins->inst_basereg;
+@@ -4453,21 +4469,6 @@ mono_arch_output_basic_block (MonoCompile *cfg, 
MonoBasicBlock *bb)
+                       ppc_mr (code, ins->dreg, ppc_r0);
+                       break;
+               }
+-#else
+-              case OP_ICONV_TO_R4:
+-              case OP_ICONV_TO_R8: {
+-                      if (cpu_hw_caps & PPC_ISA_64) {
+-                              ppc_srawi(code, ppc_r0, ins->sreg1, 31);
+-                              ppc_stw (code, ppc_r0, -8, ppc_r1);
+-                              ppc_stw (code, ins->sreg1, -4, ppc_r1);
+-                              ppc_lfd (code, ins->dreg, -8, ppc_r1);
+-                              ppc_fcfid (code, ins->dreg, ins->dreg);
+-                              if (ins->opcode == OP_ICONV_TO_R4)
+-                                      ppc_frsp (code, ins->dreg, ins->dreg);
+-                              }
+-                      break;
+-              }
+-#endif
+               case OP_ATOMIC_CAS_I4:
+               CASE_PPC64 (OP_ATOMIC_CAS_I8) {
+                       int location = ins->sreg1;

diff --git a/dev-lang/mono/mono-4.0.2.5.ebuild 
b/dev-lang/mono/mono-4.0.2.5.ebuild
index 7ee376d..99e0bdf 100644
--- a/dev-lang/mono/mono-4.0.2.5.ebuild
+++ b/dev-lang/mono/mono-4.0.2.5.ebuild
@@ -75,6 +75,10 @@ src_prepare() {
        # https://bugzilla.xamarin.com/show_bug.cgi?id=32015
        epatch 
"${FILESDIR}/${P}-fix-mono-dis-makefile-am-when-without-sgen.patch"
 
+       # Fix atomic_add_i4 support for 32-bit ppc
+       # 
https://github.com/mono/mono/commit/8f379f0c8f98493180b508b9e68b9aa76c0c5bdf
+       epatch "${FILESDIR}/${P}-fix-ppc-atomic-add-i4.patch"
+
        autotools-utils_src_prepare
 
        epatch "${FILESDIR}/systemweb3.patch"

diff --git a/dev-lang/mono/mono-4.0.3.13.ebuild 
b/dev-lang/mono/mono-4.0.3.13.ebuild
index e182449..e7057b9 100644
--- a/dev-lang/mono/mono-4.0.3.13.ebuild
+++ b/dev-lang/mono/mono-4.0.3.13.ebuild
@@ -75,6 +75,10 @@ src_prepare() {
        # https://bugzilla.xamarin.com/show_bug.cgi?id=32015
        epatch 
"${FILESDIR}/${PN}-4.0.2.5-fix-mono-dis-makefile-am-when-without-sgen.patch"
 
+       # Fix atomic_add_i4 support for 32-bit ppc
+       # 
https://github.com/mono/mono/commit/8f379f0c8f98493180b508b9e68b9aa76c0c5bdf
+       epatch "${FILESDIR}/${PN}-4.0.2.5-fix-ppc-atomic-add-i4.patch"
+
        autotools-utils_src_prepare
 
        epatch "${FILESDIR}/systemweb3.patch"

diff --git a/dev-lang/mono/mono-4.0.3.19.ebuild 
b/dev-lang/mono/mono-4.0.3.19.ebuild
index e182449..e7057b9 100644
--- a/dev-lang/mono/mono-4.0.3.19.ebuild
+++ b/dev-lang/mono/mono-4.0.3.19.ebuild
@@ -75,6 +75,10 @@ src_prepare() {
        # https://bugzilla.xamarin.com/show_bug.cgi?id=32015
        epatch 
"${FILESDIR}/${PN}-4.0.2.5-fix-mono-dis-makefile-am-when-without-sgen.patch"
 
+       # Fix atomic_add_i4 support for 32-bit ppc
+       # 
https://github.com/mono/mono/commit/8f379f0c8f98493180b508b9e68b9aa76c0c5bdf
+       epatch "${FILESDIR}/${PN}-4.0.2.5-fix-ppc-atomic-add-i4.patch"
+
        autotools-utils_src_prepare
 
        epatch "${FILESDIR}/systemweb3.patch"

Reply via email to