]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
rs6000.md (*movsi_got_internal_mem): New pattern.
authorJeffrey A Law <law@cygnus.com>
Wed, 22 Oct 1997 06:31:00 +0000 (06:31 +0000)
committerJeff Law <law@gcc.gnu.org>
Wed, 22 Oct 1997 06:31:00 +0000 (00:31 -0600)
        * rs6000.md (*movsi_got_internal_mem): New pattern.
        (*movsi_got_internal_mem splitter): New define_split.
Fixes some egcs bugs.

From-SVN: r16146

gcc/ChangeLog
gcc/config/rs6000/rs6000.md

index 8b80c2e95afc6348abd660c4764fec5fc37c45a0..baf8257566344de4ed145ca5132742cad202ff21 100644 (file)
@@ -1,3 +1,8 @@
+Wed Oct 22 00:34:12 1997  Jeffrey A Law  (law@cygnus.com)
+
+       * rs6000.md (*movsi_got_internal_mem): New pattern.
+       (*movsi_got_internal_mem splitter): New define_split.
+
 Tue Oct 21 18:14:03 1997  Jim Wilson  <wilson@cygnus.com>
 
        * obstack.h (obstack_empty_p): Fix spurious space after backslash.
index ce2435edc66af115db225883e337cebd1cc54bbc..39877c0d45858e1c12157db33a04af4652ed1c77 100644 (file)
   "{l|lwz} %0,%a1@got(%2)"
   [(set_attr "type" "load")])
 
+;; Sometimes, though, the GOT `register' will be on the stack. Deal with
+;; this case specially.
+;; Force final to split this insn (if it hasn't been split already) to
+;; avoid having to create a suitable output template.
+(define_insn "*movsi_got_internal_mem"
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (unspec [(match_operand:SI 1 "got_no_const_operand" "")
+                (match_operand:SI 2 "memory_operand" "m")] 8))]
+  "(DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)
+    && flag_pic == 1
+    && (reload_in_progress || reload_completed)"
+  "#"
+  [(set_attr "type" "load")
+   (set_attr "length" "8")])
+
+;; Used by sched, shorten_branches and final when the GOT pseudo reg
+;; didn't get allocated to a hard register.
+(define_split 
+  [(set (match_operand:SI 0 "register_operand" "=r")
+       (unspec [(match_operand:SI 1 "got_no_const_operand" "")
+                (match_operand:SI 2 "memory_operand" "m")] 8))]
+  "(DEFAULT_ABI == ABI_V4 || DEFAULT_ABI == ABI_SOLARIS)
+    && flag_pic == 1
+    && (reload_in_progress || reload_completed)"
+  [(set (match_dup 0) (match_dup 2))
+   (set (match_dup 0) (unspec [(match_dup 1)(match_dup 0)] 8))]
+  "")
+
 ;; For SI, we special-case integers that can't be loaded in one insn.  We
 ;; do the load 16-bits at a time.  We could do this by loading from memory,
 ;; and this is even supposed to be faster, but it is simpler not to get