This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Re: problem with generating epilogue


On Thu, Aug 03, 2000 at 08:59:12PM -0700, Richard Henderson wrote:
> On Thu, Aug 03, 2000 at 06:49:05PM +0100, Herman ten Brugge wrote:
> > -	  emit_indirect_jump (ecx);
> > +	  emit_insn (gen_indirect_jump (ecx));
> 
> This is not quite correct.  You should use emit_jump_insn.

Actually, I take that back -- you really have to use some
form of "return" instruction.  That is, some pattern containing
(return).  E.g.

  (jump_insn 20 19 21 (parallel[
            (return)
            (use (reg:SI 2 ecx))
        ] ) 300 {return_indirect_internal} (insn_list 17 (nil))
    (expr_list:REG_DEAD (reg:SI 2 ecx)
        (nil)))

I'm committing the following patch to cure the x86 failure.


r~


	* i386.md (return_indirect_internal): New.
	* i386.c (ix86_expand_epilogue): Use it.

Index: i386.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/i386/i386.c,v
retrieving revision 1.167
diff -c -p -d -r1.167 i386.c
*** i386.c	2000/08/02 17:01:11	1.167
--- i386.c	2000/08/04 04:10:59
*************** ix86_expand_epilogue (emit_return)
*** 2138,2144 ****
  
  	  emit_insn (gen_popsi1 (ecx));
  	  emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, popc));
! 	  emit_indirect_jump (ecx);
  	}
        else
  	emit_jump_insn (gen_return_pop_internal (popc));
--- 2138,2144 ----
  
  	  emit_insn (gen_popsi1 (ecx));
  	  emit_insn (gen_addsi3 (stack_pointer_rtx, stack_pointer_rtx, popc));
! 	  emit_jump_insn (gen_return_indirect_internal (ecx));
  	}
        else
  	emit_jump_insn (gen_return_pop_internal (popc));
Index: i386.md
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/i386/i386.md,v
retrieving revision 1.170
diff -c -p -d -r1.170 i386.md
*** i386.md	2000/08/02 14:02:15	1.170
--- i386.md	2000/08/04 04:10:59
***************
*** 8681,8686 ****
--- 8681,8694 ----
     (set_attr "length_immediate" "2")
     (set_attr "modrm" "0")])
  
+ (define_insn "return_indirect_internal"
+   [(return)
+    (use (match_operand:SI 0 "register_operand" "r"))]
+   "reload_completed"
+   "jmp\\t%*%0"
+   [(set_attr "type" "ibr")
+    (set_attr "length_immediate" "0")])
+ 
  (define_insn "nop"
    [(const_int 0)]
    ""

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]