[mono/mono] a0cd023d: Fix the `nop` opcode on some MIPS-based Loongson CPUs.

"alexrp ([email protected])" <[email protected]> Fri, 15 Nov 2013 14:13:46 +0000
Newsgroups gmane.comp.gnome.mono.patches
Message-ID <000001425c1c4805-8de0e1e7-e9b7-488c-8e50-0ccddbd88d38-000000@email.amazonses.com>
   Branch: refs/heads/master
     Home: https://github.com/mono/mono
  Compare: https://github.com/mono/mono/compare/891d594b3f7a...a0cd023d06cb

   Commit: a0cd023d06cb09c43d1cb93ee08bf917292e31ed
   Author: Alex Rønne Petersen <[email protected]> 
     Date: 2013-11-15 14:08:06 GMT
      URL: https://github.com/mono/mono/commit/a0cd023d06cb09c43d1cb93ee08bf917292e31ed

Fix the `nop` opcode on some MIPS-based Loongson CPUs.

After much trouble building Mono in Debian/MIPS, @directhex
narrowed it down to this issue:

https://sourceware.org/ml/binutils/2009-11/msg00387.html

So since some of the 2E and 2F versions of the Loongson CPUs
break with a regular `sll zero, zero, 0` we need to issue an
`or at, at, 0`. This makes sure we don't randomly deadlock or
blow up when the CPU is under heavy load.

Yes, really.

Changed paths:
  M mono/arch/mips/mips-codegen.h

Modified: mono/arch/mips/mips-codegen.h
===================================================================
@@ -334,7 +334,7 @@ enum {
 /* misc and coprocessor ops */
 #define mips_move(c,dest,src) mips_addu(c,dest,src,mips_zero)
 #define mips_dmove(c,dest,src) mips_daddu(c,dest,src,mips_zero)
-#define mips_nop(c) mips_sll(c,0,0,0)
+#define mips_nop(c) mips_or(c,mips_at,mips_at,0)
 #define mips_break(c,code) mips_emit32(c, ((code)<<6)|13)
 #define mips_mfhi(c,dest) mips_format_r(c,0,0,0,dest,0,16)
 #define mips_mflo(c,dest) mips_format_r(c,0,0,0,dest,0,18)
_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches