* ppc-opc.c (insert_fxm): Enable two operand mfcr when -many as
authorAlan Modra <amodra@gmail.com>
Wed, 19 May 2004 05:11:48 +0000 (05:11 +0000)
committerAlan Modra <amodra@gmail.com>
Wed, 19 May 2004 05:11:48 +0000 (05:11 +0000)
well as when -mpower4.

opcodes/ChangeLog
opcodes/ppc-opc.c

index 8ef9095..3cd88ab 100644 (file)
@@ -1,3 +1,8 @@
+2004-05-19  Alan Modra  <amodra@bigpond.net.au>
+
+       * ppc-opc.c (insert_fxm): Enable two operand mfcr when -many as
+       well as when -mpower4.
+
 2004-05-13  Nick Clifton  <nickc@redhat.com>
 
        * po/fr.po: Updated French translation.
@@ -10,7 +15,7 @@
 
 2004-05-05  Alan Modra  <amodra@bigpond.net.au>
 
-       PR 146.
+       PR 147.
        * ppc-opc.c (PPCVEC): Remove PPC_OPCODE_PPC.
 
 2004-04-29  Ben Elliston  <bje@au.ibm.com>
index 35f7fc6..51fcfe2 100644 (file)
@@ -1004,8 +1004,13 @@ insert_fxm (unsigned long insn,
 
   /* If only one bit of the FXM field is set, we can use the new form
      of the instruction, which is faster.  Unlike the Power4 branch hint
-     encoding, this is not backward compatible.  */
-  else if ((dialect & PPC_OPCODE_POWER4) != 0 && (value & -value) == value)
+     encoding, this is not backward compatible.  Do not generate the
+     new form unless -mpower4 has been given, or -many and the two
+     operand form of mfcr was used.  */
+  else if ((value & -value) == value
+          && ((dialect & PPC_OPCODE_POWER4) != 0
+              || ((dialect & PPC_OPCODE_ANY) != 0
+                  && (insn & (0x3ff << 1)) == 19 << 1)))
     insn |= 1 << 20;
 
   /* Any other value on mfcr is an error.  */