Commit 5c8cfcd6 by John David Anglin Committed by John David Anglin

pa.md (interspace_jump): Revise comment.

	* pa.md (interspace_jump): Revise comment.
	(builtin_longjmp): Block initial setup insns from delay slot of
	interspace branch.
	(builtin_setjmp_receiver): New expander to save and restore PIC
	register.

	* som.h (NM_FLAGS): Remove `-n' sort option.  Revise comment.

From-SVN: r41902
parent 1a560c3a
2001-05-07 John David Anglin <dave@hiauly1.hia.nrc.ca>
* pa.md (interspace_jump): Revise comment.
(builtin_longjmp): Block initial setup insns from delay slot of
interspace branch.
(builtin_setjmp_receiver): New expander to save and restore PIC
register.
* som.h (NM_FLAGS): Remove `-n' sort option. Revise comment.
Mon May 7 09:30:14 2001 Jeffrey A Law (law@cygnus.com) Mon May 7 09:30:14 2001 Jeffrey A Law (law@cygnus.com)
* toplev.c (compile_file): Set up the output file before we call * toplev.c (compile_file): Set up the output file before we call
......
...@@ -6212,8 +6212,7 @@ ...@@ -6212,8 +6212,7 @@
;;; EH does longjmp's from and within the data section. Thus, ;;; EH does longjmp's from and within the data section. Thus,
;;; an interspace branch is required for the longjmp implementation. ;;; an interspace branch is required for the longjmp implementation.
;;; Registers r1 and r2 are not saved in the jmpbuf environment. ;;; Registers r1 and r2 are used as scratch registers for the jump.
;;; Thus, they can be used as scratch registers for the jump.
(define_expand "interspace_jump" (define_expand "interspace_jump"
[(parallel [(parallel
[(set (pc) (match_operand 0 "pmode_register_operand" "a")) [(set (pc) (match_operand 0 "pmode_register_operand" "a"))
...@@ -6263,10 +6262,16 @@ ...@@ -6263,10 +6262,16 @@
where to look for it when we get back to setjmp's function for where to look for it when we get back to setjmp's function for
restoring the gp. */ restoring the gp. */
emit_move_insn (pv, lab); emit_move_insn (pv, lab);
/* Prevent the insns above from being scheduled into the delay slot
of the interspace jump because the space register could change. */
emit_insn (gen_blockage ());
emit_jump_insn (gen_interspace_jump (pv)); emit_jump_insn (gen_interspace_jump (pv));
emit_barrier (); emit_barrier ();
DONE; DONE;
}") }")
;;; Hope this is only within a function... ;;; Hope this is only within a function...
(define_insn "indirect_jump" (define_insn "indirect_jump"
[(set (pc) (match_operand 0 "register_operand" "r"))] [(set (pc) (match_operand 0 "register_operand" "r"))]
...@@ -7124,3 +7129,18 @@ ...@@ -7124,3 +7129,18 @@
emit_insn (gen_blockage ()); emit_insn (gen_blockage ());
DONE; DONE;
}") }")
(define_expand "builtin_setjmp_receiver"
[(label_ref (match_operand 0 "" ""))]
"flag_pic"
"
{
if (PIC_OFFSET_TABLE_SAVE_RTX == NULL_RTX)
hppa_init_pic_save ();
/* Restore the PIC register. Hopefully, this will always be from
a stack slot. The only registers that are valid after a
builtin_longjmp are the stack and frame pointers. */
emit_move_insn (pic_offset_table_rtx, PIC_OFFSET_TABLE_SAVE_RTX);
DONE;
}")
/* Definitions for SOM assembler support. /* Definitions for SOM assembler support.
Copyright (C) 1999 Free Software Foundation, Inc. Copyright (C) 1999, 2001 Free Software Foundation, Inc.
This file is part of GNU CC. This file is part of GNU CC.
...@@ -52,9 +52,10 @@ Boston, MA 02111-1307, USA. */ ...@@ -52,9 +52,10 @@ Boston, MA 02111-1307, USA. */
"\t.stabs \"\",%d,0,0,L$text_end0000\nL$text_end0000:\n", N_SO) "\t.stabs \"\",%d,0,0,L$text_end0000\nL$text_end0000:\n", N_SO)
/* The HP supplied NM will print out the subspace names for each symbol it /* The HP supplied NM will print out the subspace names for each symbol it
finds, which can cause false matches when looking for ctors/dtors. The finds, which can cause collect2 to find false matches when searching
"-p" argument changes the output to not include subspace names. */ for ctors/dtors. The "-p" option changes the output to not include
#define NM_FLAGS "-p -n" subspace names. The "-n" sorting option is unnecessary. */
#define NM_FLAGS "-p"
/* HPUX has a program 'chatr' to list the dependencies of dynamically /* HPUX has a program 'chatr' to list the dependencies of dynamically
linked executables and shared libraries. */ linked executables and shared libraries. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment