summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorgavin <gavin@138bc75d-0d04-0410-961f-82ee72b054a4>1999-11-25 04:44:27 +0000
committergavin <gavin@138bc75d-0d04-0410-961f-82ee72b054a4>1999-11-25 04:44:27 +0000
commit02d6aad867e45e6c51843256b4df857e14e72a03 (patch)
tree0df1fa284ef4f6eb495542b17e20307dec69e94e /gcc
parente7b3c55cb8a5b152bb20362c37e40579b007ed44 (diff)
downloadgcc-02d6aad867e45e6c51843256b4df857e14e72a03.tar.gz
* config/mips/mips.md (call_value_multiple_interanal1): New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@30660 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/mips/mips.md23
2 files changed, 27 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index c560118de56..48ae9f0e988 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+1999-11-24 Gavin Romig-Koch <gavin@cygnus.com>
+
+ * config/mips/mips.md (call_value_multiple_interanal1): New.
+
1999-11-24 Jason Merrill <jason@casey.cygnus.com>
* dwarf2out.c (free_AT, free_die): New fns.
diff --git a/gcc/config/mips/mips.md b/gcc/config/mips/mips.md
index 8ef8a72a05a..a1f28c6e891 100644
--- a/gcc/config/mips/mips.md
+++ b/gcc/config/mips/mips.md
@@ -9838,6 +9838,29 @@ ld\\t%2,%1-%S1(%2)\;daddu\\t%2,%2,$31\;j\\t%2"
;; ??? May eventually need all 6 versions of the call patterns with multiple
;; return values.
+(define_insn "call_value_multiple_internal1"
+ [(set (match_operand 0 "register_operand" "=df")
+ (call (mem (match_operand 1 "call_insn_operand" "ri"))
+ (match_operand 2 "" "i")))
+ (set (match_operand 3 "register_operand" "=df")
+ (call (mem (match_dup 1))
+ (match_dup 2)))
+ (clobber (match_operand:SI 4 "register_operand" "=d"))]
+ "!TARGET_ABICALLS && !TARGET_LONG_CALLS"
+ "*
+{
+ register rtx target = operands[1];
+
+ if (GET_CODE (target) == SYMBOL_REF)
+ return \"%*jal\\t%1\";
+ else if (GET_CODE (target) == CONST_INT)
+ return \"%[li\\t%@,%1\\n\\t%*jal\\t%4,%@%]\";
+ else
+ return \"%*jal\\t%4,%1\";
+}"
+ [(set_attr "type" "call")
+ (set_attr "mode" "none")])
+
(define_insn "call_value_multiple_internal2"
[(set (match_operand 0 "register_operand" "=df")
(call (mem (match_operand 1 "call_insn_operand" "ri"))