target-insns.def (extv, [...]): New targetm instruction patterns.
authorRichard Sandiford <richard.sandiford@arm.com>
Sun, 5 Jul 2015 08:02:59 +0000 (08:02 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Sun, 5 Jul 2015 08:02:59 +0000 (08:02 +0000)
gcc/
* target-insns.def (extv, extzv, insv): New targetm instruction
patterns.
* optabs.c (get_extraction_insn): Use them instead of HAVE_*/gen_*
interface.
* recog.c (simplify_while_replacing): Likewise.

From-SVN: r225432

gcc/ChangeLog
gcc/optabs.c
gcc/recog.c
gcc/target-insns.def

index 3aa6ee1fddb874c8be29134906b7be2f995a7fca..be4471c9331d5d4b43052afd3a75d9b3afcfc5ee 100644 (file)
@@ -1,3 +1,11 @@
+2015-07-05  Richard Sandiford  <richard.sandiford@arm.com>
+
+       * target-insns.def (extv, extzv, insv): New targetm instruction
+       patterns.
+       * optabs.c (get_extraction_insn): Use them instead of HAVE_*/gen_*
+       interface.
+       * recog.c (simplify_while_replacing): Likewise.
+
 2015-07-05  Richard Sandiford  <richard.sandiford@arm.com>
 
        * target-insns.def (doloop_begin, doloop_end): New targetm
index 5c761457fe934dcd31a76b6f873ffa39338377b5..6818458a23d886d226cea58c35cb234077f539a9 100644 (file)
@@ -8416,18 +8416,6 @@ expand_jump_insn (enum insn_code icode, unsigned int nops,
 }
 
 /* Reduce conditional compilation elsewhere.  */
-#ifndef HAVE_insv
-#define HAVE_insv      0
-#define CODE_FOR_insv  CODE_FOR_nothing
-#endif
-#ifndef HAVE_extv
-#define HAVE_extv      0
-#define CODE_FOR_extv  CODE_FOR_nothing
-#endif
-#ifndef HAVE_extzv
-#define HAVE_extzv     0
-#define CODE_FOR_extzv CODE_FOR_nothing
-#endif
 
 /* Enumerates the possible types of structure operand to an
    extraction_insn.  */
@@ -8512,25 +8500,25 @@ get_extraction_insn (extraction_insn *insn,
   switch (pattern)
     {
     case EP_insv:
-      if (HAVE_insv
+      if (targetm.have_insv ()
          && get_traditional_extraction_insn (insn, type, mode,
-                                             CODE_FOR_insv, 0, 3))
+                                             targetm.code_for_insv, 0, 3))
        return true;
       return get_optab_extraction_insn (insn, type, mode, insv_optab,
                                        insvmisalign_optab, 2);
 
     case EP_extv:
-      if (HAVE_extv
+      if (targetm.have_extv ()
          && get_traditional_extraction_insn (insn, type, mode,
-                                             CODE_FOR_extv, 1, 0))
+                                             targetm.code_for_extv, 1, 0))
        return true;
       return get_optab_extraction_insn (insn, type, mode, extv_optab,
                                        extvmisalign_optab, 3);
 
     case EP_extzv:
-      if (HAVE_extzv
+      if (targetm.have_extzv ()
          && get_traditional_extraction_insn (insn, type, mode,
-                                             CODE_FOR_extzv, 1, 0))
+                                             targetm.code_for_extzv, 1, 0))
        return true;
       return get_optab_extraction_insn (insn, type, mode, extzv_optab,
                                        extzvmisalign_optab, 3);
index 3fbfe076ed8b1f3c682cf07c987a53886eccea65..d96e29320985b3c49b8fc241c3880dd157713d32 100644 (file)
@@ -566,15 +566,6 @@ cancel_changes (int num)
 }
 
 /* Reduce conditional compilation elsewhere.  */
-#ifndef HAVE_extv
-#define HAVE_extv      0
-#define CODE_FOR_extv  CODE_FOR_nothing
-#endif
-#ifndef HAVE_extzv
-#define HAVE_extzv     0
-#define CODE_FOR_extzv CODE_FOR_nothing
-#endif
-
 /* A subroutine of validate_replace_rtx_1 that tries to simplify the resulting
    rtx.  */
 
@@ -690,15 +681,15 @@ simplify_while_replacing (rtx *loc, rtx to, rtx_insn *object,
          machine_mode is_mode = GET_MODE (XEXP (x, 0));
          int pos = INTVAL (XEXP (x, 2));
 
-         if (GET_CODE (x) == ZERO_EXTRACT && HAVE_extzv)
+         if (GET_CODE (x) == ZERO_EXTRACT && targetm.have_extzv ())
            {
-             wanted_mode = insn_data[CODE_FOR_extzv].operand[1].mode;
+             wanted_mode = insn_data[targetm.code_for_extzv].operand[1].mode;
              if (wanted_mode == VOIDmode)
                wanted_mode = word_mode;
            }
-         else if (GET_CODE (x) == SIGN_EXTRACT && HAVE_extv)
+         else if (GET_CODE (x) == SIGN_EXTRACT && targetm.have_extv ())
            {
-             wanted_mode = insn_data[CODE_FOR_extv].operand[1].mode;
+             wanted_mode = insn_data[targetm.code_for_extv].operand[1].mode;
              if (wanted_mode == VOIDmode)
                wanted_mode = word_mode;
            }
index b5b249211e7addab1180f0a19956345899356060..4f49ba6cf57735c3dc46e018f45f4d6f87b8cc8b 100644 (file)
@@ -42,6 +42,9 @@ DEF_TARGET_INSN (doloop_begin, (rtx x0, rtx x1))
 DEF_TARGET_INSN (doloop_end, (rtx x0, rtx x1))
 DEF_TARGET_INSN (epilogue, (void))
 DEF_TARGET_INSN (exception_receiver, (void))
+DEF_TARGET_INSN (extv, (rtx x0, rtx x1, rtx x2, rtx x3))
+DEF_TARGET_INSN (extzv, (rtx x0, rtx x1, rtx x2, rtx x3))
+DEF_TARGET_INSN (insv, (rtx x0, rtx x1, rtx x2, rtx x3))
 DEF_TARGET_INSN (jump, (rtx x0))
 DEF_TARGET_INSN (load_multiple, (rtx x0, rtx x1, rtx x2))
 DEF_TARGET_INSN (mem_signal_fence, (rtx x0))