aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJan Hubicka <hubicka@freesoft.cz>1999-04-13 16:28:39 +0200
committerRichard Henderson <rth@gcc.gnu.org>1999-04-13 07:28:39 -0700
commitf72b27a5f67d7467792ab7ab52b2a361e1c9d5ea (patch)
tree17e9f3bc12080e53d84092d25df04098a8b04d8f /gcc
parenteba0e61dc231daa416063ee779e5f5d2d7de250a (diff)
downloadgcc-f72b27a5f67d7467792ab7ab52b2a361e1c9d5ea.zip
gcc-f72b27a5f67d7467792ab7ab52b2a361e1c9d5ea.tar.gz
gcc-f72b27a5f67d7467792ab7ab52b2a361e1c9d5ea.tar.bz2
Jan Hubicka <hubicka@freesoft.cz>
Jan Hubicka <hubicka@freesoft.cz> * i386.md (movsf_push): Handle memory to memory case too, new splitter. (movdf_push, movxf_push): Likewise. (movsf_push_memory, movdf_push_memory, movxf_push_memory): Remove. From-SVN: r26408
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/i386/i386.md51
2 files changed, 39 insertions, 18 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 9cdc3f4..94ec136 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+Tue Apr 13 14:26:31 1999 Jan Hubicka <hubicka@freesoft.cz>
+
+ * i386.md (movsf_push): Handle memory to memory case too, new splitter.
+ (movdf_push, movxf_push): Likewise.
+ (movsf_push_memory, movdf_push_memory, movxf_push_memory): Remove.
+
Tue Apr 13 14:14:06 1999 Jan Hubicka <hubicka@freesoft.cz>
* i386.md: Do not output mov %0,reg on AMD K6.
diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md
index 7e143ac..02256d4 100644
--- a/gcc/config/i386/i386.md
+++ b/gcc/config/i386/i386.md
@@ -1283,7 +1283,8 @@
(define_insn "movsf_push"
[(set (match_operand:SF 0 "push_operand" "=<,<")
(match_operand:SF 1 "general_operand" "*rfF,m"))]
- "GET_CODE (operands[1]) != MEM || reload_in_progress || reload_completed"
+ "TARGET_PUSH_MEMORY || GET_CODE (operands[1]) != MEM
+ || reload_in_progress || reload_completed"
"*
{
if (STACK_REG_P (operands[1]))
@@ -1310,11 +1311,15 @@
return AS1 (push%L0,%1);
}")
-(define_insn "movsf_push_memory"
- [(set (match_operand:SF 0 "push_operand" "=<")
- (match_operand:SF 1 "memory_operand" "m"))]
- "TARGET_PUSH_MEMORY"
- "* return AS1 (push%L0,%1);")
+(define_split
+ [(set (match_operand:SF 0 "push_operand" "")
+ (match_operand:SF 1 "general_operand" ""))]
+ "reload_completed && STACK_REG_P (operands[1])"
+ [(set (reg:SI 7)
+ (minus:SI (reg:SI 7) (const_int 4)))
+ (set (mem:SF (reg:SI 7))
+ (match_dup 1))]
+ "")
(define_expand "movsf"
[(set (match_operand:SF 0 "general_operand" "")
@@ -1405,7 +1410,8 @@
(define_insn "movdf_push"
[(set (match_operand:DF 0 "push_operand" "=<,<")
(match_operand:DF 1 "general_operand" "*rfF,o"))]
- "GET_CODE (operands[1]) != MEM || reload_in_progress || reload_completed"
+ "TARGET_PUSH_MEMORY || GET_CODE (operands[1]) != MEM
+ || reload_in_progress || reload_completed"
"*
{
if (STACK_REG_P (operands[1]))
@@ -1432,11 +1438,15 @@
return output_move_double (operands);
}")
-(define_insn "movdf_push_memory"
- [(set (match_operand:DF 0 "push_operand" "=<")
- (match_operand:DF 1 "memory_operand" "o"))]
- "TARGET_PUSH_MEMORY"
- "* return output_move_pushmem (operands, insn, GET_MODE_SIZE (DFmode),0,0);")
+(define_split
+ [(set (match_operand:DF 0 "push_operand" "")
+ (match_operand:DF 1 "register_operand" ""))]
+ "reload_completed && STACK_REG_P (operands[1])"
+ [(set (reg:SI 7)
+ (minus:SI (reg:SI 7) (const_int 8)))
+ (set (mem:DF (reg:SI 7))
+ (match_dup 1))]
+ "")
(define_expand "movdf"
[(set (match_operand:DF 0 "general_operand" "")
@@ -1529,7 +1539,8 @@
(define_insn "movxf_push"
[(set (match_operand:XF 0 "push_operand" "=<,<")
(match_operand:XF 1 "general_operand" "*rfF,o"))]
- "GET_CODE (operands[1]) != MEM || reload_in_progress || reload_completed"
+ "TARGET_PUSH_MEMORY || GET_CODE (operands[1]) != MEM
+ || reload_in_progress || reload_completed"
"*
{
if (STACK_REG_P (operands[1]))
@@ -1555,11 +1566,15 @@
return output_move_double (operands);
}")
-(define_insn "movxf_push_memory"
- [(set (match_operand:XF 0 "push_operand" "=<")
- (match_operand:XF 1 "memory_operand" "o"))]
- "TARGET_PUSH_MEMORY"
- "* return output_move_pushmem (operands, insn, GET_MODE_SIZE (XFmode),0,0);")
+(define_split
+ [(set (match_operand:XF 0 "push_operand" "")
+ (match_operand:XF 1 "register_operand" ""))]
+ "reload_completed && STACK_REG_P (operands[1])"
+ [(set (reg:SI 7)
+ (minus:SI (reg:SI 7) (const_int 12)))
+ (set (mem:XF (reg:SI 7))
+ (match_dup 1))]
+ "")
(define_expand "movxf"
[(set (match_operand:XF 0 "general_operand" "")