aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1993-03-02 13:02:47 -0800
committerJim Wilson <wilson@gcc.gnu.org>1993-03-02 13:02:47 -0800
commitb6744f97de92a964f6d3635d6b63050bf03c2bfd (patch)
tree2a4e8fb567cb7e24af05fcac00e5a8747184350a /gcc
parente770968be5dbacddb5591860fc43a3f2d3c83894 (diff)
downloadgcc-b6744f97de92a964f6d3635d6b63050bf03c2bfd.zip
gcc-b6744f97de92a964f6d3635d6b63050bf03c2bfd.tar.gz
gcc-b6744f97de92a964f6d3635d6b63050bf03c2bfd.tar.bz2
(call_internal*): Use hard register 19 (r3) in clobber
instead of match_scratch. From-SVN: r3604
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/i960/i960.md13
1 files changed, 9 insertions, 4 deletions
diff --git a/gcc/config/i960/i960.md b/gcc/config/i960/i960.md
index c42a3f9..14b05de 100644
--- a/gcc/config/i960/i960.md
+++ b/gcc/config/i960/i960.md
@@ -2154,14 +2154,19 @@
;; We need a call saved register allocated for the match_scratch, so we use
;; 'l' because all local registers are call saved.
+;; ??? I would prefer to use a match_scratch here, but match_scratch allocated
+;; registers can't be used for spills. In a function with lots of calls,
+;; local-alloc may allocate all local registers to a match_scratch, leaving
+;; no local registers available for spills.
+
(define_insn "call_internal"
[(call (match_operand:SI 0 "general_operand" "g")
(match_operand:SI 1 "immediate_operand" "i"))
(use (match_operand:SI 2 "address_operand" "p"))
- (clobber (match_scratch:SI 3 "=&l"))]
+ (clobber (reg:SI 19))]
""
"* return i960_output_call_insn (operands[0], operands[1], operands[2],
- operands[3], insn);"
+ insn);"
[(set_attr "type" "call")])
(define_expand "call_value"
@@ -2184,10 +2189,10 @@
(call (match_operand:SI 1 "general_operand" "g")
(match_operand:SI 2 "immediate_operand" "i")))
(use (match_operand:SI 3 "address_operand" "p"))
- (clobber (match_scratch:SI 4 "=&l"))]
+ (clobber (reg:SI 19))]
""
"* return i960_output_call_insn (operands[1], operands[2], operands[3],
- operands[4], insn);"
+ insn);"
[(set_attr "type" "call")])
(define_insn "return"