]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
m32c: Don't use set_optab_handler
authorRichard Henderson <rth@redhat.com>
Wed, 1 Aug 2012 20:26:49 +0000 (13:26 -0700)
committerRichard Henderson <rth@gcc.gnu.org>
Wed, 1 Aug 2012 20:26:49 +0000 (13:26 -0700)
From-SVN: r190049

gcc/ChangeLog
gcc/config/m32c/cond.md
gcc/config/m32c/m32c.c

index 0a4d77a793f55cd5897f30865ffce4b12d1d374a..0afe7b64b628eacf5a7aefe649e8b8c6e15a1a46 100644 (file)
@@ -1,3 +1,10 @@
+2012-08-01  Richard Henderson  <rth@redhat.com>
+
+       * config/m32c/m32c.c (TARGET_INIT_LIBFUNCS): Remove.
+       (m32c_init_libfuncs): Remove.
+       * config/m32c/cond.md (cstore<QHPSI>4_16): Rename from cstore<QHPSI>4.
+       (cstore<QHPSI>4): New expander.
+
 2012-08-01  Richard Guenther  <rguenther@suse.de>
 
        * tree-flow-inline.h (referenced_var): Remove.
index c751070e71659394f3738567634fdec2b4d4d3bb..5886a7da963d4f09bb40db4582d41c64b2d2d5ee 100644 (file)
 
 ;; These are the pre-split patterns for the conditional sets.
 
-(define_insn_and_split "cstore<mode>4"
+(define_expand "cstore<mode>4"
+  [(set (match_operand:QI 0 "register_operand")
+       (match_operator:QI 1 "ordered_comparison_operator"
+        [(match_operand:QHPSI 2 "mra_operand")
+         (match_operand:QHPSI 3 "mrai_operand")]))]
+  ""
+{
+  if (TARGET_A24)
+    {
+      rtx o = gen_reg_rtx (HImode);
+      emit_insn (gen_cstore<mode>4_24 (o, operands[1],
+                                      operands[2], operands[3]));
+      emit_move_insn (operands[0], gen_lowpart (QImode, o));
+      DONE;
+    }
+})
+
+(define_insn_and_split "*cstore<mode>4_16"
   [(set (match_operand:QI 0 "register_operand" "=Rqi")
        (match_operator:QI 1 "ordered_comparison_operator"
         [(match_operand:QHPSI 2 "mra_operand" "RraSd")
          (match_operand:QHPSI 3 "mrai_operand" "RraSdi")]))]
   "TARGET_A16"
   "#"
-  "reload_completed"
+  "&& reload_completed"
   [(set (reg:CC FLG_REGNO)
        (compare (match_dup 2)
                 (match_dup 3)))
          (match_operand:QHPSI 3 "mrai_operand" "RraSdi")]))]
   "TARGET_A24"
   "#"
-  "reload_completed"
+  "&& reload_completed"
   [(set (reg:CC FLG_REGNO)
        (compare (match_dup 2)
                 (match_dup 3)))
index 79b03fa06508409b02ab5eec05ab37fc695abe62..878be09fb5958da1be4f7d6edc86bcded6a641a8 100644 (file)
@@ -1857,25 +1857,6 @@ m32c_trampoline_init (rtx m_tramp, tree fndecl, rtx chainval)
 #undef A0
 }
 
-/* Implicit Calls to Library Routines */
-
-#undef TARGET_INIT_LIBFUNCS
-#define TARGET_INIT_LIBFUNCS m32c_init_libfuncs
-static void
-m32c_init_libfuncs (void)
-{
-  /* We do this because the M32C has an HImode operand, but the
-     M16C has an 8-bit operand.  Since gcc looks at the match data
-     and not the expanded rtl, we have to reset the optab so that
-     the right modes are found. */
-  if (TARGET_A24)
-    {
-      set_optab_handler (cstore_optab, QImode, CODE_FOR_cstoreqi4_24);
-      set_optab_handler (cstore_optab, HImode, CODE_FOR_cstorehi4_24);
-      set_optab_handler (cstore_optab, PSImode, CODE_FOR_cstorepsi4_24);
-    }
-}
-
 /* Addressing Modes */
 
 /* The r8c/m32c family supports a wide range of non-orthogonal