Commit 43ab026f by Andreas Krebbel Committed by Ulrich Weigand

s390.md ("builtin_setjmp_setup"): Insn deleted.

2003-09-26  Andreas Krebbel  <krebbel1@de.ibm.com>

	* config/s390/s390.md ("builtin_setjmp_setup"): Insn deleted.
	("builtin_longjmp"): Insn deleted.
	("save_stack_nonlocal"): Save literal pool base pointer behind
	backchain and stack pointer.
	("restore_stack_nonlocal"): Restore literal pool base pointer.
	* config/s390/s390.h (STACK_SAVEAREA_MODE): Double size of
	the stack save area for the nonlocal goto case.

From-SVN: r71826
parent 853ca657
2003-09-26 Andreas Krebbel <krebbel1@de.ibm.com>
* config/s390/s390.md ("builtin_setjmp_setup"): Insn deleted.
("builtin_longjmp"): Insn deleted.
("save_stack_nonlocal"): Save literal pool base pointer behind
backchain and stack pointer.
("restore_stack_nonlocal"): Restore literal pool base pointer.
* config/s390/s390.h (STACK_SAVEAREA_MODE): Double size of
the stack save area for the nonlocal goto case.
2003-09-26 John David Anglin <dave.anglin@nrc-cnrc.gc.ca> 2003-09-26 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
PR bootstrap/12358 PR bootstrap/12358
......
...@@ -240,7 +240,7 @@ if (INTEGRAL_MODE_P (MODE) && \ ...@@ -240,7 +240,7 @@ if (INTEGRAL_MODE_P (MODE) && \
NONLOCAL needs twice Pmode to maintain both backchain and SP. */ NONLOCAL needs twice Pmode to maintain both backchain and SP. */
#define STACK_SAVEAREA_MODE(LEVEL) \ #define STACK_SAVEAREA_MODE(LEVEL) \
(LEVEL == SAVE_FUNCTION ? VOIDmode \ (LEVEL == SAVE_FUNCTION ? VOIDmode \
: LEVEL == SAVE_NONLOCAL ? (TARGET_64BIT ? TImode : DImode) : Pmode) : LEVEL == SAVE_NONLOCAL ? (TARGET_64BIT ? OImode : TImode) : Pmode)
/* Define target floating point format. */ /* Define target floating point format. */
#define TARGET_FLOAT_FORMAT \ #define TARGET_FLOAT_FORMAT \
......
...@@ -7057,20 +7057,9 @@ ...@@ -7057,20 +7057,9 @@
; ;
; setjmp/longjmp instruction pattern(s). ; setjmp instruction pattern.
; ;
(define_expand "builtin_setjmp_setup"
[(match_operand 0 "register_operand" "")]
""
{
rtx base = gen_rtx_MEM (Pmode, plus_constant (operands[0], 4 * GET_MODE_SIZE (Pmode)));
rtx basereg = gen_rtx_REG (Pmode, BASE_REGISTER);
emit_move_insn (base, basereg);
DONE;
})
(define_expand "builtin_setjmp_receiver" (define_expand "builtin_setjmp_receiver"
[(match_operand 0 "" "")] [(match_operand 0 "" "")]
"flag_pic" "flag_pic"
...@@ -7080,31 +7069,6 @@ ...@@ -7080,31 +7069,6 @@
DONE; DONE;
}) })
(define_expand "builtin_longjmp"
[(match_operand 0 "register_operand" "")]
""
{
/* The elements of the buffer are, in order: */
rtx fp = gen_rtx_MEM (Pmode, operands[0]);
rtx lab = gen_rtx_MEM (Pmode, plus_constant (operands[0], GET_MODE_SIZE (Pmode)));
rtx stack = gen_rtx_MEM (Pmode, plus_constant (operands[0], 2 * GET_MODE_SIZE (Pmode)));
rtx base = gen_rtx_MEM (Pmode, plus_constant (operands[0], 4 * GET_MODE_SIZE (Pmode)));
rtx basereg = gen_rtx_REG (Pmode, BASE_REGISTER);
rtx jmp = gen_reg_rtx (Pmode);
emit_move_insn (jmp, lab);
emit_move_insn (basereg, base);
emit_stack_restore (SAVE_NONLOCAL, stack, NULL_RTX);
emit_move_insn (hard_frame_pointer_rtx, fp);
emit_insn (gen_rtx_USE (VOIDmode, hard_frame_pointer_rtx));
emit_insn (gen_rtx_USE (VOIDmode, stack_pointer_rtx));
emit_insn (gen_rtx_USE (VOIDmode, basereg));
emit_indirect_jump (jmp);
DONE;
})
;; These patterns say how to save and restore the stack pointer. We need not ;; These patterns say how to save and restore the stack pointer. We need not
;; save the stack pointer at function level since we are careful to ;; save the stack pointer at function level since we are careful to
;; preserve the backchain. At block level, we have to restore the backchain ;; preserve the backchain. At block level, we have to restore the backchain
...@@ -7144,13 +7108,17 @@ ...@@ -7144,13 +7108,17 @@
{ {
rtx temp = gen_reg_rtx (Pmode); rtx temp = gen_reg_rtx (Pmode);
/* Copy the backchain to the first word, sp to the second. */ /* Copy the backchain to the first word, sp to the second and the literal pool
base to the third. */
emit_move_insn (operand_subword (operands[0], 2, 0,
TARGET_64BIT ? OImode : TImode),
gen_rtx_REG (Pmode, BASE_REGISTER));
emit_move_insn (temp, gen_rtx_MEM (Pmode, operands[1])); emit_move_insn (temp, gen_rtx_MEM (Pmode, operands[1]));
emit_move_insn (operand_subword (operands[0], 0, 0, emit_move_insn (operand_subword (operands[0], 0, 0,
TARGET_64BIT ? TImode : DImode), TARGET_64BIT ? OImode : TImode),
temp); temp);
emit_move_insn (operand_subword (operands[0], 1, 0, emit_move_insn (operand_subword (operands[0], 1, 0,
TARGET_64BIT ? TImode : DImode), TARGET_64BIT ? OImode : TImode),
operands[1]); operands[1]);
DONE; DONE;
}) })
...@@ -7161,15 +7129,22 @@ ...@@ -7161,15 +7129,22 @@
"" ""
{ {
rtx temp = gen_reg_rtx (Pmode); rtx temp = gen_reg_rtx (Pmode);
rtx base = gen_rtx_REG (Pmode, BASE_REGISTER);
/* Restore the backchain from the first word, sp from the second. */ /* Restore the backchain from the first word, sp from the second and the
literal pool base from the third. */
emit_move_insn (temp, emit_move_insn (temp,
operand_subword (operands[1], 0, 0, operand_subword (operands[1], 0, 0,
TARGET_64BIT ? TImode : DImode)); TARGET_64BIT ? OImode : TImode));
emit_move_insn (operands[0], emit_move_insn (operands[0],
operand_subword (operands[1], 1, 0, operand_subword (operands[1], 1, 0,
TARGET_64BIT ? TImode : DImode)); TARGET_64BIT ? OImode : TImode));
emit_move_insn (gen_rtx_MEM (Pmode, operands[0]), temp); emit_move_insn (gen_rtx_MEM (Pmode, operands[0]), temp);
emit_move_insn (base,
operand_subword (operands[1], 2, 0,
TARGET_64BIT ? OImode : TImode));
emit_insn (gen_rtx_USE (VOIDmode, base));
DONE; DONE;
}) })
......
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