microblaze.md: Add expander for simple_return...
authorMichael Eager <eager@eagercon.com>
Thu, 29 Dec 2011 15:50:28 +0000 (15:50 +0000)
committerMichael Eager <eager@gcc.gnu.org>
Thu, 29 Dec 2011 15:50:28 +0000 (15:50 +0000)
* config/microblaze/microblaze.md: Add expander for simple_return,
  return, add return_internal and simple_return_internal insns.

From-SVN: r182725

gcc/ChangeLog
gcc/config/microblaze/microblaze.md

index 4c8ff34..8b7c11e 100644 (file)
@@ -1,3 +1,8 @@
+2011-12-29  Michael Eager  <eager@eagercon.com>
+
+       * config/microblaze/microblaze.md: Add expander for simple_return,
+       return, add return_internal and simple_return_internal insns.
+
 2011-12-29  Oleg Endo  <olegendo@gcc.gnu.org>
 
        * config/sh/sh.h (BRANCH_COST): Use sh_branch_cost variable.
index 61ae2f7..a4c341f 100644 (file)
 ;; # instructions (4 bytes each)
 (define_attr "length" "" (const_int 4))
 
+(define_code_iterator any_return [return simple_return])
+
+;; <optab> expands to the name of the optab for a particular code.
+(define_code_attr optab [(return "return")
+                        (simple_return "simple_return")])
+
+
 ;;----------------------------------------------------
 ;; Attribute describing the processor.  
 ;;----------------------------------------------------
 
 ;; Trivial return.  Make it look like a normal return insn as that
 ;; allows jump optimizations to work better .
-(define_insn "return"
-  [(return)]
+(define_expand "return"
+  [(simple_return)]
   "microblaze_can_use_return_insn ()"
+  {}
+)
+
+(define_expand "simple_return"
+  [(simple_return)]
+  ""
+  {}
+)
+
+(define_insn "*<optab>"
+  [(any_return)]
+  ""
   { 
     if (microblaze_is_interrupt_handler ())
         return "rtid\tr14, 0\;%#";
   }
   [(set_attr "type"    "jump")
   (set_attr "mode"     "none")
-  (set_attr "length"   "4")])
+  (set_attr "length"   "4")]
+)
 
 ;; Normal return.
-;; We match any mode for the return address, so that this will work with
-;; both 32 bit and 64 bit targets.
 
-(define_insn "return_internal"
-  [(parallel [(use (match_operand:SI 0 "register_operand" ""))
-              (return)])]
+(define_insn "<optab>_internal"
+  [(any_return)
+   (use (match_operand:SI 0 "register_operand" ""))]
   ""
   {    
     if (microblaze_is_interrupt_handler ())