aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Wehle <john@feith.com>1998-04-20 15:06:40 +0000
committerJim Wilson <wilson@gcc.gnu.org>1998-04-20 08:06:40 -0700
commitdc0f0eb82e44c834c5a0552a036d5e87c7b524aa (patch)
tree638a341cad9d7be4b87228d41430c775109add9a
parentba70e85a7719a544573acff0de64730c1bf045f2 (diff)
downloadgcc-dc0f0eb82e44c834c5a0552a036d5e87c7b524aa.zip
gcc-dc0f0eb82e44c834c5a0552a036d5e87c7b524aa.tar.gz
gcc-dc0f0eb82e44c834c5a0552a036d5e87c7b524aa.tar.bz2
Patch from John Wehle to fix movxf_push spill reg allocation failure.
* i386.md (movsf_push, movdf_push, movxf_push): Allow memory operands during and after reload. From-SVN: r19346
-rw-r--r--gcc/ChangeLog5
-rw-r--r--gcc/config/i386/i386.md21
2 files changed, 20 insertions, 6 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 563928d..fbac26b 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,8 @@
+Mon Apr 20 15:04:14 1998 John Wehle (john@feith.com)
+
+ * i386.md (movsf_push, movdf_push, movxf_push): Allow memory
+ operands during and after reload.
+
Mon Apr 20 22:37:50 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
* final.c (shorten_branches, init_insn_lengths): Move code
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index ecae517..7fe22aa 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -1189,8 +1189,8 @@
(define_insn "movsf_push"
[(set (match_operand:SF 0 "push_operand" "=<,<")
- (match_operand:SF 1 "nonmemory_operand" "rF,f"))]
- ""
+ (match_operand:SF 1 "general_operand" "*rfF,m"))]
+ "GET_CODE (operands[1]) != MEM || reload_in_progress || reload_completed"
"*
{
if (STACK_REG_P (operands[1]))
@@ -1213,6 +1213,7 @@
RET;
}
+
return AS1 (push%L0,%1);
}")
@@ -1336,8 +1337,8 @@
(define_insn "movdf_push"
[(set (match_operand:DF 0 "push_operand" "=<,<")
- (match_operand:DF 1 "nonmemory_operand" "rF,f"))]
- ""
+ (match_operand:DF 1 "general_operand" "*rfF,o"))]
+ "GET_CODE (operands[1]) != MEM || reload_in_progress || reload_completed"
"*
{
if (STACK_REG_P (operands[1]))
@@ -1357,6 +1358,10 @@
RET;
}
+
+ if (which_alternative == 1)
+ return output_move_pushmem (operands, insn, GET_MODE_SIZE (DFmode), 0, 0);
+
return output_move_double (operands);
}")
@@ -1482,8 +1487,8 @@
(define_insn "movxf_push"
[(set (match_operand:XF 0 "push_operand" "=<,<")
- (match_operand:XF 1 "nonmemory_operand" "rF,f"))]
- ""
+ (match_operand:XF 1 "general_operand" "*rfF,o"))]
+ "GET_CODE (operands[1]) != MEM || reload_in_progress || reload_completed"
"*
{
if (STACK_REG_P (operands[1]))
@@ -1502,6 +1507,10 @@
RET;
}
+
+ if (which_alternative == 1)
+ return output_move_pushmem (operands, insn, GET_MODE_SIZE (XFmode), 0, 0);
+
return output_move_double (operands);
}")