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
This commit is contained in:
John David Anglin 2001-05-07 19:22:28 +00:00 committed by John David Anglin
parent 1a560c3a48
commit 5c8cfcd63d
3 changed files with 37 additions and 6 deletions

View File

@ -1,3 +1,13 @@
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

View File

@ -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 @@
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 @@
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;
}")

View File

@ -1,5 +1,5 @@
/* 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. */
"\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. */