OSDN Git Service

Jan Hubicka <hubicka@freesoft.cz>
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 13 Apr 1999 14:28:39 +0000 (14:28 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 13 Apr 1999 14:28:39 +0000 (14:28 +0000)
        * 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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@26408 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/i386/i386.md

index 9cdc3f4..94ec136 100644 (file)
@@ -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.
index 7e143ac..02256d4 100644 (file)
 (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]))
   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" "")
 (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]))
   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" "")
 (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]))
   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" "")