calls.c, function.c: Always define PREFERRED_STACK_BOUNDARY if not already defined.

* calls.c, function.c: Always define PREFERRED_STACK_BOUNDARY
	if not already defined.  Remove all #ifdefs on STACK_BOUNDARY;
	this macro is now required.

	* cselib.c (cselib_process_insn), flow.c (propagate_block),
	loop.c (find_and_verify_loops), reload.c (reload): Check
	for rtx code of CALL_INSN, not CALL, when deciding if we
	need to check for REG_SETJMP note.

	* gcse.c (compute_hash_table, compute_store_table): Update
	the #ifdef NON_SAVING_SETJMP code to the new REG_SETJMP
	logic.

	* config/avr/avr.c: Fix typo.
	* config/convex/convex.c (expand_movstr): Use adjust_address.
	* config/dsp16xx/dsp16xx.c: Define dsp16xx_compare_gen
	variable.
	* config/dsp16xx/dsp16xx.md: Correct calls to replace_equiv_address.
	* config/elxsi/elxsi.c: Include tree.h, expr.h, regs.h, and flags.h.
	Fix typo.
	* config/elxsi/elxsi.h: Don't define Rmode (typo for Pmode?)
	Do define STACK_BOUNDARY.
	* config/i370/i370.c: Include expr.h.
	* config/i860/sysv3.h, config/i860/sysv4.h, config/m32r/m32r.h,
	config/pa/som.h, config/v850/v850.h: Take in_ctors and
	in_dtors out of EXTRA_SECTIONS; take CTORS_SECTION_FUNCTION
	and DTORS_SECTION_FUNCTION out of EXTRA_SECTION_FUNCTIONS.
	* config/m88k/m88k.c: Include c-tree.h after expr.h.
	* config/pdp11/pdp11.c: Include expr.h and toplev.h.
	* config/romp/romp.c: Include expr.h after tree.h.
	Include toplev.h.
	(output_fpop): Use xmalloc, not oballoc.
	* config/we32k/we32k.c: Include expr.h.

From-SVN: r44768
This commit is contained in:
Zack Weinberg 2001-08-10 16:19:22 +00:00
parent 07fe2dec7a
commit 19652adf82
24 changed files with 93 additions and 102 deletions

View File

@ -1,3 +1,39 @@
2001-08-10 Zack Weinberg <zackw@stanford.edu>
* calls.c, function.c: Always define PREFERRED_STACK_BOUNDARY
if not already defined. Remove all #ifdefs on STACK_BOUNDARY;
this macro is now required.
* cselib.c (cselib_process_insn), flow.c (propagate_block),
loop.c (find_and_verify_loops), reload.c (reload): Check
for rtx code of CALL_INSN, not CALL, when deciding if we
need to check for REG_SETJMP note.
* gcse.c (compute_hash_table, compute_store_table): Update
the #ifdef NON_SAVING_SETJMP code to the new REG_SETJMP
logic.
* config/avr/avr.c: Fix typo.
* config/convex/convex.c (expand_movstr): Use adjust_address.
* config/dsp16xx/dsp16xx.c: Define dsp16xx_compare_gen
variable.
* config/dsp16xx/dsp16xx.md: Correct calls to replace_equiv_address.
* config/elxsi/elxsi.c: Include tree.h, expr.h, regs.h, and flags.h.
Fix typo.
* config/elxsi/elxsi.h: Don't define Rmode (typo for Pmode?)
Do define STACK_BOUNDARY.
* config/i370/i370.c: Include expr.h.
* config/i860/sysv3.h, config/i860/sysv4.h, config/m32r/m32r.h,
config/pa/som.h, config/v850/v850.h: Take in_ctors and
in_dtors out of EXTRA_SECTIONS; take CTORS_SECTION_FUNCTION
and DTORS_SECTION_FUNCTION out of EXTRA_SECTION_FUNCTIONS.
* config/m88k/m88k.c: Include c-tree.h after expr.h.
* config/pdp11/pdp11.c: Include expr.h and toplev.h.
* config/romp/romp.c: Include expr.h after tree.h.
Include toplev.h.
(output_fpop): Use xmalloc, not oballoc.
* config/we32k/we32k.c: Include expr.h.
2001-08-10 Kazu Hirata <kazu@hxi.com> 2001-08-10 Kazu Hirata <kazu@hxi.com>
* config/h8300/h8300.h: Fix formatting. * config/h8300/h8300.h: Fix formatting.
@ -41,7 +77,7 @@
2001-08-09 John David Anglin <dave@hiauly1.hia.nrc.ca> 2001-08-09 John David Anglin <dave@hiauly1.hia.nrc.ca>
* stmt.c (expand_null_return_1): Remove code to generate simple returns * stmt.c (expand_null_return_1): Remove code to generate simple returns
and "use_goto" argument. and "use_goto" argument.
(expand_null_return, expand_value_return): Update all callers. (expand_null_return, expand_value_return): Update all callers.
* function.c (expand_function_end): Remove code to generate simple * function.c (expand_function_end): Remove code to generate simple
@ -161,7 +197,7 @@
(ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): Remove. (ASM_OUTPUT_CONSTRUCTOR, ASM_OUTPUT_DESTRUCTOR): Remove.
(TARGET_ASM_CONSTRUCTOR, TARGET_ASM_DESTRUCTOR): New. (TARGET_ASM_CONSTRUCTOR, TARGET_ASM_DESTRUCTOR): New.
* config/c4x/c4x.c: Move include of tree.h. * config/c4x/c4x.c: Move include of tree.h.
* config/clipper/clipper.c (clix_asm_out_constructor): New. * config/clipper/clipper.c (clix_asm_out_constructor): New.
(clix_asm_out_destructor): New. (clix_asm_out_destructor): New.
* config/clipper/clix.h (ASM_OUTPUT_CONSTRUCTOR): Remove. * config/clipper/clix.h (ASM_OUTPUT_CONSTRUCTOR): Remove.
(ASM_OUTPUT_DESTRUCTOR): Remove. (ASM_OUTPUT_DESTRUCTOR): Remove.

View File

@ -37,7 +37,7 @@ Boston, MA 02111-1307, USA. */
#define FUNCTION_OK_FOR_SIBCALL(DECL) 1 #define FUNCTION_OK_FOR_SIBCALL(DECL) 1
#endif #endif
#if !defined PREFERRED_STACK_BOUNDARY && defined STACK_BOUNDARY #if !defined PREFERRED_STACK_BOUNDARY
#define PREFERRED_STACK_BOUNDARY STACK_BOUNDARY #define PREFERRED_STACK_BOUNDARY STACK_BOUNDARY
#endif #endif
@ -988,7 +988,7 @@ restore_fixed_argument_area (save_area, argblock, high_to_save, low_to_save)
move_by_pieces (stack_area, validize_mem (save_area), move_by_pieces (stack_area, validize_mem (save_area),
high_to_save - low_to_save + 1, PARM_BOUNDARY); high_to_save - low_to_save + 1, PARM_BOUNDARY);
} }
#endif #endif /* REG_PARM_STACK_SPACE */
/* If any elements in ARGS refer to parameters that are to be passed in /* If any elements in ARGS refer to parameters that are to be passed in
registers, but not in memory, and whose alignment does not permit a registers, but not in memory, and whose alignment does not permit a
@ -1368,10 +1368,8 @@ compute_argument_block_size (reg_parm_stack_space, args_size,
/* For accumulate outgoing args mode we don't need to align, since the frame /* For accumulate outgoing args mode we don't need to align, since the frame
will be already aligned. Align to STACK_BOUNDARY in order to prevent will be already aligned. Align to STACK_BOUNDARY in order to prevent
backends from generating missaligned frame sizes. */ backends from generating missaligned frame sizes. */
#ifdef STACK_BOUNDARY
if (ACCUMULATE_OUTGOING_ARGS && preferred_stack_boundary > STACK_BOUNDARY) if (ACCUMULATE_OUTGOING_ARGS && preferred_stack_boundary > STACK_BOUNDARY)
preferred_stack_boundary = STACK_BOUNDARY; preferred_stack_boundary = STACK_BOUNDARY;
#endif
/* Compute the actual size of the argument block required. The variable /* Compute the actual size of the argument block required. The variable
and constant sizes must be combined, the size may have to be rounded, and constant sizes must be combined, the size may have to be rounded,
@ -1382,7 +1380,6 @@ compute_argument_block_size (reg_parm_stack_space, args_size,
args_size->var = ARGS_SIZE_TREE (*args_size); args_size->var = ARGS_SIZE_TREE (*args_size);
args_size->constant = 0; args_size->constant = 0;
#ifdef PREFERRED_STACK_BOUNDARY
preferred_stack_boundary /= BITS_PER_UNIT; preferred_stack_boundary /= BITS_PER_UNIT;
if (preferred_stack_boundary > 1) if (preferred_stack_boundary > 1)
{ {
@ -1393,7 +1390,6 @@ compute_argument_block_size (reg_parm_stack_space, args_size,
abort (); abort ();
args_size->var = round_up (args_size->var, preferred_stack_boundary); args_size->var = round_up (args_size->var, preferred_stack_boundary);
} }
#endif
if (reg_parm_stack_space > 0) if (reg_parm_stack_space > 0)
{ {
@ -1412,7 +1408,6 @@ compute_argument_block_size (reg_parm_stack_space, args_size,
} }
else else
{ {
#ifdef PREFERRED_STACK_BOUNDARY
preferred_stack_boundary /= BITS_PER_UNIT; preferred_stack_boundary /= BITS_PER_UNIT;
if (preferred_stack_boundary < 1) if (preferred_stack_boundary < 1)
preferred_stack_boundary = 1; preferred_stack_boundary = 1;
@ -1422,7 +1417,6 @@ compute_argument_block_size (reg_parm_stack_space, args_size,
/ preferred_stack_boundary / preferred_stack_boundary
* preferred_stack_boundary) * preferred_stack_boundary)
- stack_pointer_delta); - stack_pointer_delta);
#endif
args_size->constant = MAX (args_size->constant, args_size->constant = MAX (args_size->constant,
reg_parm_stack_space); reg_parm_stack_space);
@ -2296,11 +2290,7 @@ expand_call (exp, target, ignore)
} }
/* Figure out the amount to which the stack should be aligned. */ /* Figure out the amount to which the stack should be aligned. */
#ifdef PREFERRED_STACK_BOUNDARY
preferred_stack_boundary = PREFERRED_STACK_BOUNDARY; preferred_stack_boundary = PREFERRED_STACK_BOUNDARY;
#else
preferred_stack_boundary = STACK_BOUNDARY;
#endif
/* Operand 0 is a pointer-to-function; get the type of the function. */ /* Operand 0 is a pointer-to-function; get the type of the function. */
funtype = TREE_TYPE (TREE_OPERAND (exp, 0)); funtype = TREE_TYPE (TREE_OPERAND (exp, 0));
@ -2905,7 +2895,6 @@ expand_call (exp, target, ignore)
compute_argument_addresses (args, argblock, num_actuals); compute_argument_addresses (args, argblock, num_actuals);
#ifdef PREFERRED_STACK_BOUNDARY
/* If we push args individually in reverse order, perform stack alignment /* If we push args individually in reverse order, perform stack alignment
before the first push (the last arg). */ before the first push (the last arg). */
if (PUSH_ARGS_REVERSED && argblock == 0 if (PUSH_ARGS_REVERSED && argblock == 0
@ -2931,12 +2920,6 @@ expand_call (exp, target, ignore)
/* Now that the stack is properly aligned, pops can't safely /* Now that the stack is properly aligned, pops can't safely
be deferred during the evaluation of the arguments. */ be deferred during the evaluation of the arguments. */
NO_DEFER_POP; NO_DEFER_POP;
#endif
/* Don't try to defer pops if preallocating, not even from the first arg,
since ARGBLOCK probably refers to the SP. */
if (argblock)
NO_DEFER_POP;
funexp = rtx_for_function_call (fndecl, exp); funexp = rtx_for_function_call (fndecl, exp);
@ -3008,13 +2991,11 @@ expand_call (exp, target, ignore)
sibcall_failure = 1; sibcall_failure = 1;
} }
#ifdef PREFERRED_STACK_BOUNDARY
/* If we pushed args in forward order, perform stack alignment /* If we pushed args in forward order, perform stack alignment
after pushing the last arg. */ after pushing the last arg. */
if (!PUSH_ARGS_REVERSED && argblock == 0) if (!PUSH_ARGS_REVERSED && argblock == 0)
anti_adjust_stack (GEN_INT (adjusted_args_size.constant anti_adjust_stack (GEN_INT (adjusted_args_size.constant
- unadjusted_args_size)); - unadjusted_args_size));
#endif
/* If register arguments require space on the stack and stack space /* If register arguments require space on the stack and stack space
was not preallocated, allocate stack space here for arguments was not preallocated, allocate stack space here for arguments
@ -3074,11 +3055,9 @@ expand_call (exp, target, ignore)
/* All arguments and registers used for the call must be set up by /* All arguments and registers used for the call must be set up by
now! */ now! */
#ifdef PREFERRED_STACK_BOUNDARY
/* Stack must be properly aligned now. */ /* Stack must be properly aligned now. */
if (pass && stack_pointer_delta % preferred_unit_stack_boundary) if (pass && stack_pointer_delta % preferred_unit_stack_boundary)
abort (); abort ();
#endif
/* Generate the actual call instruction. */ /* Generate the actual call instruction. */
emit_call_1 (funexp, fndecl, funtype, unadjusted_args_size, emit_call_1 (funexp, fndecl, funtype, unadjusted_args_size,
@ -3558,12 +3537,10 @@ emit_library_call_value_1 (retval, orgfun, value, fn_type, outmode, nargs, p)
} }
fun = orgfun; fun = orgfun;
#ifdef PREFERRED_STACK_BOUNDARY
/* Ensure current function's preferred stack boundary is at least /* Ensure current function's preferred stack boundary is at least
what we need. */ what we need. */
if (cfun->preferred_stack_boundary < PREFERRED_STACK_BOUNDARY) if (cfun->preferred_stack_boundary < PREFERRED_STACK_BOUNDARY)
cfun->preferred_stack_boundary = PREFERRED_STACK_BOUNDARY; cfun->preferred_stack_boundary = PREFERRED_STACK_BOUNDARY;
#endif
/* If this kind of value comes back in memory, /* If this kind of value comes back in memory,
decide where in memory it should come back. */ decide where in memory it should come back. */
@ -3772,14 +3749,12 @@ emit_library_call_value_1 (retval, orgfun, value, fn_type, outmode, nargs, p)
assemble_external_libcall (fun); assemble_external_libcall (fun);
original_args_size = args_size; original_args_size = args_size;
#ifdef PREFERRED_STACK_BOUNDARY
args_size.constant = (((args_size.constant args_size.constant = (((args_size.constant
+ stack_pointer_delta + stack_pointer_delta
+ STACK_BYTES - 1) + STACK_BYTES - 1)
/ STACK_BYTES / STACK_BYTES
* STACK_BYTES) * STACK_BYTES)
- stack_pointer_delta); - stack_pointer_delta);
#endif
args_size.constant = MAX (args_size.constant, args_size.constant = MAX (args_size.constant,
reg_parm_stack_space); reg_parm_stack_space);
@ -3848,13 +3823,11 @@ emit_library_call_value_1 (retval, orgfun, value, fn_type, outmode, nargs, p)
argblock = push_block (GEN_INT (args_size.constant), 0, 0); argblock = push_block (GEN_INT (args_size.constant), 0, 0);
} }
#ifdef PREFERRED_STACK_BOUNDARY
/* If we push args individually in reverse order, perform stack alignment /* If we push args individually in reverse order, perform stack alignment
before the first push (the last arg). */ before the first push (the last arg). */
if (argblock == 0 && PUSH_ARGS_REVERSED) if (argblock == 0 && PUSH_ARGS_REVERSED)
anti_adjust_stack (GEN_INT (args_size.constant anti_adjust_stack (GEN_INT (args_size.constant
- original_args_size.constant)); - original_args_size.constant));
#endif
if (PUSH_ARGS_REVERSED) if (PUSH_ARGS_REVERSED)
{ {
@ -4000,13 +3973,11 @@ emit_library_call_value_1 (retval, orgfun, value, fn_type, outmode, nargs, p)
} }
} }
#ifdef PREFERRED_STACK_BOUNDARY
/* If we pushed args in forward order, perform stack alignment /* If we pushed args in forward order, perform stack alignment
after pushing the last arg. */ after pushing the last arg. */
if (argblock == 0 && !PUSH_ARGS_REVERSED) if (argblock == 0 && !PUSH_ARGS_REVERSED)
anti_adjust_stack (GEN_INT (args_size.constant anti_adjust_stack (GEN_INT (args_size.constant
- original_args_size.constant)); - original_args_size.constant));
#endif
if (PUSH_ARGS_REVERSED) if (PUSH_ARGS_REVERSED)
argnum = nargs - 1; argnum = nargs - 1;
@ -4064,11 +4035,9 @@ emit_library_call_value_1 (retval, orgfun, value, fn_type, outmode, nargs, p)
valreg = (mem_value == 0 && outmode != VOIDmode valreg = (mem_value == 0 && outmode != VOIDmode
? hard_libcall_value (outmode) : NULL_RTX); ? hard_libcall_value (outmode) : NULL_RTX);
#ifdef PREFERRED_STACK_BOUNDARY
/* Stack must be properly aligned now. */ /* Stack must be properly aligned now. */
if (stack_pointer_delta & (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT - 1)) if (stack_pointer_delta & (PREFERRED_STACK_BOUNDARY / BITS_PER_UNIT - 1))
abort (); abort ();
#endif
before_call = get_last_insn (); before_call = get_last_insn ();

View File

@ -815,7 +815,6 @@ avr_output_function_epilogue (file, size)
/* Return nonzero if X (an RTX) is a legitimate memory address on the target /* Return nonzero if X (an RTX) is a legitimate memory address on the target
machine for a memory operand of mode MODE. */ machine for a memory operand of mode MODE. */
int
int int
legitimate_address_p (mode, x, strict) legitimate_address_p (mode, x, strict)
enum machine_mode mode; enum machine_mode mode;

View File

@ -439,8 +439,8 @@ expand_movstr (operands)
/* Advance to next piece. */ /* Advance to next piece. */
size = GET_MODE_SIZE (mode); size = GET_MODE_SIZE (mode);
src = adj_offsettable_operand (src, size); src = adjust_address (src, mode, size);
dest = adj_offsettable_operand (dest, size); dest = adjust_address (dest, mode, size);
len -= size; len -= size;
} }

View File

@ -58,6 +58,7 @@ const char *save_chip_name;
rtx dsp16xx_compare_op0; rtx dsp16xx_compare_op0;
rtx dsp16xx_compare_op1; rtx dsp16xx_compare_op1;
rtx (*dsp16xx_compare_gen) PARAMS (());
static const char *fp; static const char *fp;
static const char *sp; static const char *sp;

View File

@ -1131,8 +1131,8 @@
operands[5] = addr0; operands[5] = addr0;
operands[6] = addr1; operands[6] = addr1;
operands[0] = replace_equiv_address (operands[0], VOIDmode, addr0); operands[0] = replace_equiv_address (operands[0], addr0);
operands[1] = replace_equiv_address (operands[1], VOIDmode, addr1); operands[1] = replace_equiv_address (operands[1], addr1);
}") }")
(define_insn "" (define_insn ""

View File

@ -26,6 +26,10 @@ Boston, MA 02111-1307, USA. */
#include "rtl.h" #include "rtl.h"
#include "function.h" #include "function.h"
#include "output.h" #include "output.h"
#include "tree.h"
#include "expr.h"
#include "regs.h"
#include "flags.h"
#include "tm_p.h" #include "tm_p.h"
#include "target.h" #include "target.h"
#include "target-def.h" #include "target-def.h"
@ -129,7 +133,7 @@ elxsi_output_function_epilogue (file, size)
{ {
for (regno = 0; regno < FIRST_PSEUDO_REGISTER; ++regno) for (regno = 0; regno < FIRST_PSEUDO_REGISTER; ++regno)
if (regs_ever_live[regno] && !call_used_regs[regno]) if (regs_ever_live[regno] && !call_used_regs[regno])
fprintf (file, "\tld.64\t.r%d,[.sp]%d\n", regno, (cnt + =8) - 12); fprintf (file, "\tld.64\t.r%d,[.sp]%d\n", regno, (cnt += 8) - 12);
fprintf (file, "\texit\t%d\n", size + cnt); fprintf (file, "\texit\t%d\n", size + cnt);
} }

View File

@ -79,7 +79,6 @@ extern int target_flags;
if using 16-bit ints on a 68000, this would still be 32. if using 16-bit ints on a 68000, this would still be 32.
But on a machine with 16-bit registers, this would be 16. */ But on a machine with 16-bit registers, this would be 16. */
#define BITS_PER_WORD 64 #define BITS_PER_WORD 64
#define Rmode DImode
#define INT_TYPE_SIZE 32 #define INT_TYPE_SIZE 32
@ -106,6 +105,9 @@ extern int target_flags;
/* Allocation boundary (in *bits*) for storing arguments in argument list. */ /* Allocation boundary (in *bits*) for storing arguments in argument list. */
#define PARM_BOUNDARY 32 #define PARM_BOUNDARY 32
/* Boundary (in *bits*) on which stack pointer should be aligned. */
#define STACK_BOUNDARY 32
/* Allocation boundary (in *bits*) for the code of a function. */ /* Allocation boundary (in *bits*) for the code of a function. */
#define FUNCTION_BOUNDARY 8 #define FUNCTION_BOUNDARY 8

View File

@ -34,6 +34,7 @@ Boston, MA 02111-1307, USA. */
#include "output.h" #include "output.h"
#include "insn-attr.h" #include "insn-attr.h"
#include "function.h" #include "function.h"
#include "expr.h"
#include "flags.h" #include "flags.h"
#include "recog.h" #include "recog.h"
#include "toplev.h" #include "toplev.h"

View File

@ -149,13 +149,11 @@ extern char *current_function_original_name;
#define TDESC_SECTION_ASM_OP "\t.section\t.tdesc" #define TDESC_SECTION_ASM_OP "\t.section\t.tdesc"
#undef EXTRA_SECTIONS #undef EXTRA_SECTIONS
#define EXTRA_SECTIONS in_const, in_ctors, in_dtors, in_tdesc #define EXTRA_SECTIONS in_const, in_tdesc
#undef EXTRA_SECTION_FUNCTIONS #undef EXTRA_SECTION_FUNCTIONS
#define EXTRA_SECTION_FUNCTIONS \ #define EXTRA_SECTION_FUNCTIONS \
CONST_SECTION_FUNCTION \ CONST_SECTION_FUNCTION \
CTORS_SECTION_FUNCTION \
DTORS_SECTION_FUNCTION \
TDESC_SECTION_FUNCTION TDESC_SECTION_FUNCTION
#define TDESC_SECTION_FUNCTION \ #define TDESC_SECTION_FUNCTION \

View File

@ -175,13 +175,11 @@ extern char *current_function_original_name;
#define TDESC_SECTION_ASM_OP "\t.section\t.tdesc" #define TDESC_SECTION_ASM_OP "\t.section\t.tdesc"
#undef EXTRA_SECTIONS #undef EXTRA_SECTIONS
#define EXTRA_SECTIONS in_const, in_ctors, in_dtors, in_tdesc #define EXTRA_SECTIONS in_const, in_tdesc
#undef EXTRA_SECTION_FUNCTIONS #undef EXTRA_SECTION_FUNCTIONS
#define EXTRA_SECTION_FUNCTIONS \ #define EXTRA_SECTION_FUNCTIONS \
CONST_SECTION_FUNCTION \ CONST_SECTION_FUNCTION \
CTORS_SECTION_FUNCTION \
DTORS_SECTION_FUNCTION \
TDESC_SECTION_FUNCTION TDESC_SECTION_FUNCTION
#define TDESC_SECTION_FUNCTION \ #define TDESC_SECTION_FUNCTION \

View File

@ -1548,7 +1548,7 @@ extern int m32r_sched_odd_word_p;
`in_text' and `in_data'. You need not define this macro `in_text' and `in_data'. You need not define this macro
on a system with no other sections (that GCC needs to use). */ on a system with no other sections (that GCC needs to use). */
#undef EXTRA_SECTIONS #undef EXTRA_SECTIONS
#define EXTRA_SECTIONS in_sdata, in_sbss, in_const, in_ctors, in_dtors #define EXTRA_SECTIONS in_sdata, in_sbss, in_const
/* One or more functions to be defined in "varasm.c". These /* One or more functions to be defined in "varasm.c". These
functions should do jobs analogous to those of `text_section' and functions should do jobs analogous to those of `text_section' and
@ -1557,8 +1557,6 @@ extern int m32r_sched_odd_word_p;
#undef EXTRA_SECTION_FUNCTIONS #undef EXTRA_SECTION_FUNCTIONS
#define EXTRA_SECTION_FUNCTIONS \ #define EXTRA_SECTION_FUNCTIONS \
CONST_SECTION_FUNCTION \ CONST_SECTION_FUNCTION \
CTORS_SECTION_FUNCTION \
DTORS_SECTION_FUNCTION \
SDATA_SECTION_FUNCTION \ SDATA_SECTION_FUNCTION \
SBSS_SECTION_FUNCTION SBSS_SECTION_FUNCTION

View File

@ -33,8 +33,8 @@ Boston, MA 02111-1307, USA. */
#include "insn-attr.h" #include "insn-attr.h"
#include "tree.h" #include "tree.h"
#include "function.h" #include "function.h"
#include "c-tree.h"
#include "expr.h" #include "expr.h"
#include "c-tree.h"
#include "flags.h" #include "flags.h"
#include "recog.h" #include "recog.h"
#include "toplev.h" #include "toplev.h"

View File

@ -260,13 +260,7 @@ do { \
/* Define the .bss section for ASM_OUTPUT_LOCAL to use. */ /* Define the .bss section for ASM_OUTPUT_LOCAL to use. */
#ifndef CTORS_SECTION_FUNCTION
#define EXTRA_SECTIONS in_readonly_data #define EXTRA_SECTIONS in_readonly_data
#define CTORS_SECTION_FUNCTION
#define DTORS_SECTION_FUNCTION
#else
#define EXTRA_SECTIONS in_readonly_data, in_ctors, in_dtors
#endif
/* FIXME: HPUX ld generates incorrect GOT entries for "T" fixups /* FIXME: HPUX ld generates incorrect GOT entries for "T" fixups
which reference data within the $TEXT$ space (for example constant which reference data within the $TEXT$ space (for example constant
@ -293,9 +287,7 @@ readonly_data () \
fprintf (asm_out_file, "%s\n", READONLY_DATA_ASM_OP); \ fprintf (asm_out_file, "%s\n", READONLY_DATA_ASM_OP); \
in_section = in_readonly_data; \ in_section = in_readonly_data; \
} \ } \
} \ }
CTORS_SECTION_FUNCTION \
DTORS_SECTION_FUNCTION
/* This is how to output a command to make the user-level label named NAME /* This is how to output a command to make the user-level label named NAME
defined for reference from other files. defined for reference from other files.

View File

@ -34,6 +34,8 @@ Boston, MA 02111-1307, USA. */
#include "flags.h" #include "flags.h"
#include "recog.h" #include "recog.h"
#include "tree.h" #include "tree.h"
#include "expr.h"
#include "toplev.h"
#include "tm_p.h" #include "tm_p.h"
#include "target.h" #include "target.h"
#include "target-def.h" #include "target-def.h"

View File

@ -33,10 +33,11 @@ Boston, MA 02111-1307, USA. */
#include "insn-attr.h" #include "insn-attr.h"
#include "flags.h" #include "flags.h"
#include "recog.h" #include "recog.h"
#include "expr.h"
#include "obstack.h" #include "obstack.h"
#include "tree.h" #include "tree.h"
#include "function.h" #include "function.h"
#include "expr.h"
#include "toplev.h"
#include "tm_p.h" #include "tm_p.h"
#include "target.h" #include "target.h"
#include "target-def.h" #include "target-def.h"
@ -1546,7 +1547,7 @@ output_fpop (code, op0, op1, op2, insn)
goto win; goto win;
/* We have never seen this operation before. */ /* We have never seen this operation before. */
fpop = (struct fp_op *) oballoc (sizeof (struct fp_op)); fpop = (struct fp_op *) xmalloc (sizeof (struct fp_op));
fpop->mem_offset = data_offset; fpop->mem_offset = data_offset;
fpop->opcode = code; fpop->opcode = code;
fpop->noperands = noperands; fpop->noperands = noperands;

View File

@ -1056,8 +1056,8 @@ typedef enum
`in_text' and `in_data'. You need not define this macro on a `in_text' and `in_data'. You need not define this macro on a
system with no other sections (that GCC needs to use). */ system with no other sections (that GCC needs to use). */
#undef EXTRA_SECTIONS #undef EXTRA_SECTIONS
#define EXTRA_SECTIONS in_tdata, in_sdata, in_zdata, in_const, in_ctors, \ #define EXTRA_SECTIONS in_tdata, in_sdata, in_zdata, in_const, \
in_dtors, in_rozdata, in_rosdata, in_sbss, in_zbss, in_zcommon, in_scommon in_rozdata, in_rosdata, in_sbss, in_zbss, in_zcommon, in_scommon
/* One or more functions to be defined in `varasm.c'. These /* One or more functions to be defined in `varasm.c'. These
functions should do jobs analogous to those of `text_section' and functions should do jobs analogous to those of `text_section' and
@ -1068,8 +1068,6 @@ in_dtors, in_rozdata, in_rosdata, in_sbss, in_zbss, in_zcommon, in_scommon
/* This could be done a lot more cleanly using ANSI C ... */ /* This could be done a lot more cleanly using ANSI C ... */
#define EXTRA_SECTION_FUNCTIONS \ #define EXTRA_SECTION_FUNCTIONS \
CONST_SECTION_FUNCTION \ CONST_SECTION_FUNCTION \
CTORS_SECTION_FUNCTION \
DTORS_SECTION_FUNCTION \
\ \
void \ void \
sdata_section () \ sdata_section () \

View File

@ -31,6 +31,7 @@ Boston, MA 02111-1307, USA. */
#include "output.h" #include "output.h"
#include "regs.h" #include "regs.h"
#include "tree.h" #include "tree.h"
#include "expr.h"
#include "tm_p.h" #include "tm_p.h"
#include "target.h" #include "target.h"
#include "target-def.h" #include "target-def.h"

View File

@ -1276,7 +1276,7 @@ cselib_process_insn (insn)
/* Forget everything at a CODE_LABEL, a volatile asm, or a setjmp. */ /* Forget everything at a CODE_LABEL, a volatile asm, or a setjmp. */
if (GET_CODE (insn) == CODE_LABEL if (GET_CODE (insn) == CODE_LABEL
|| (GET_CODE (insn) == CALL || (GET_CODE (insn) == CALL_INSN
&& find_reg_note (insn, REG_SETJMP, NULL)) && find_reg_note (insn, REG_SETJMP, NULL))
|| (GET_CODE (insn) == INSN || (GET_CODE (insn) == INSN
&& GET_CODE (PATTERN (insn)) == ASM_OPERANDS && GET_CODE (PATTERN (insn)) == ASM_OPERANDS

View File

@ -5711,7 +5711,7 @@ propagate_block (bb, live, local_set, cond_local_set, flags)
/* If this is a call to `setjmp' et al, warn if any /* If this is a call to `setjmp' et al, warn if any
non-volatile datum is live. */ non-volatile datum is live. */
if ((flags & PROP_REG_INFO) if ((flags & PROP_REG_INFO)
&& GET_CODE (insn) == CALL && GET_CODE (insn) == CALL_INSN
&& find_reg_note (insn, REG_SETJMP, NULL)) && find_reg_note (insn, REG_SETJMP, NULL))
IOR_REG_SET (regs_live_at_setjmp, pbi->reg_live); IOR_REG_SET (regs_live_at_setjmp, pbi->reg_live);

View File

@ -67,7 +67,7 @@ Boston, MA 02111-1307, USA. */
#define LOCAL_ALIGNMENT(TYPE, ALIGNMENT) ALIGNMENT #define LOCAL_ALIGNMENT(TYPE, ALIGNMENT) ALIGNMENT
#endif #endif
#if !defined (PREFERRED_STACK_BOUNDARY) && defined (STACK_BOUNDARY) #ifndef PREFERRED_STACK_BOUNDARY
#define PREFERRED_STACK_BOUNDARY STACK_BOUNDARY #define PREFERRED_STACK_BOUNDARY STACK_BOUNDARY
#endif #endif
@ -5058,13 +5058,11 @@ assign_parms (fndecl)
#endif #endif
#endif #endif
#ifdef STACK_BOUNDARY
#define STACK_BYTES (STACK_BOUNDARY / BITS_PER_UNIT) #define STACK_BYTES (STACK_BOUNDARY / BITS_PER_UNIT)
current_function_args_size current_function_args_size
= ((current_function_args_size + STACK_BYTES - 1) = ((current_function_args_size + STACK_BYTES - 1)
/ STACK_BYTES) * STACK_BYTES; / STACK_BYTES) * STACK_BYTES;
#endif
#ifdef ARGS_GROW_DOWNWARD #ifdef ARGS_GROW_DOWNWARD
current_function_arg_offset_rtx current_function_arg_offset_rtx
@ -6140,13 +6138,8 @@ prepare_function_start ()
cfun->original_decl_initial = 0; cfun->original_decl_initial = 0;
cfun->original_arg_vector = 0; cfun->original_arg_vector = 0;
#ifdef STACK_BOUNDARY
cfun->stack_alignment_needed = STACK_BOUNDARY; cfun->stack_alignment_needed = STACK_BOUNDARY;
cfun->preferred_stack_boundary = STACK_BOUNDARY; cfun->preferred_stack_boundary = STACK_BOUNDARY;
#else
cfun->stack_alignment_needed = 0;
cfun->preferred_stack_boundary = 0;
#endif
/* Set if a call to setjmp is seen. */ /* Set if a call to setjmp is seen. */
current_function_calls_setjmp = 0; current_function_calls_setjmp = 0;

View File

@ -2495,23 +2495,21 @@ compute_hash_table (set_p)
insn && insn != NEXT_INSN (BLOCK_END (bb)); insn && insn != NEXT_INSN (BLOCK_END (bb));
insn = NEXT_INSN (insn)) insn = NEXT_INSN (insn))
{ {
#ifdef NON_SAVING_SETJMP
if (NON_SAVING_SETJMP && GET_CODE (insn) == NOTE
&& NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP)
{
for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
record_last_reg_set_info (insn, regno);
continue;
}
#endif
if (! INSN_P (insn)) if (! INSN_P (insn))
continue; continue;
if (GET_CODE (insn) == CALL_INSN) if (GET_CODE (insn) == CALL_INSN)
{ {
bool clobbers_all = false;
#ifdef NON_SAVING_SETJMP
if (NON_SAVING_SETJMP
&& find_reg_note (insn, REG_SETJMP, NULL_RTX))
clobbers_all = true;
#endif
for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
if (TEST_HARD_REG_BIT (regs_invalidated_by_call, regno)) if (clobbers_all
|| TEST_HARD_REG_BIT (regs_invalidated_by_call, regno))
record_last_reg_set_info (insn, regno); record_last_reg_set_info (insn, regno);
mark_call (insn); mark_call (insn);
@ -6415,23 +6413,22 @@ compute_store_table ()
insn && insn != PREV_INSN (BLOCK_HEAD (bb)); insn && insn != PREV_INSN (BLOCK_HEAD (bb));
insn = PREV_INSN (insn)) insn = PREV_INSN (insn))
{ {
#ifdef NON_SAVING_SETJMP /* Ignore anything that is not a normal insn. */
if (NON_SAVING_SETJMP && GET_CODE (insn) == NOTE if (! INSN_P (insn))
&& NOTE_LINE_NUMBER (insn) == NOTE_INSN_SETJMP)
{
for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
SET_BIT (reg_set_in_block[bb], regno);
continue;
}
#endif
/* Ignore anything that is not a normal insn. */
if (GET_RTX_CLASS (GET_CODE (insn)) != 'i')
continue; continue;
if (GET_CODE (insn) == CALL_INSN) if (GET_CODE (insn) == CALL_INSN)
{ {
bool clobbers_all = false;
#ifdef NON_SAVING_SETJMP
if (NON_SAVING_SETJMP
&& find_reg_note (insn, REG_SETJMP, NULL_RTX))
clobbers_all = true;
#endif
for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++)
if (TEST_HARD_REG_BIT (regs_invalidated_by_call, regno)) if (clobbers_all
|| TEST_HARD_REG_BIT (regs_invalidated_by_call, regno))
SET_BIT (reg_set_in_block[bb], regno); SET_BIT (reg_set_in_block[bb], regno);
} }

View File

@ -2532,7 +2532,7 @@ find_and_verify_loops (f, loops)
break; break;
} }
if (GET_CODE (insn) == CALL if (GET_CODE (insn) == CALL_INSN
&& find_reg_note (insn, REG_SETJMP, NULL)) && find_reg_note (insn, REG_SETJMP, NULL))
{ {
/* In this case, we must invalidate our current loop and any /* In this case, we must invalidate our current loop and any

View File

@ -762,7 +762,8 @@ reload (first, global)
{ {
rtx set = single_set (insn); rtx set = single_set (insn);
if (GET_CODE (insn) == CALL && find_reg_note (insn, REG_SETJMP, NULL)) if (GET_CODE (insn) == CALL_INSN
&& find_reg_note (insn, REG_SETJMP, NULL))
for (i = 0; i < FIRST_PSEUDO_REGISTER; i++) for (i = 0; i < FIRST_PSEUDO_REGISTER; i++)
if (! call_used_regs[i]) if (! call_used_regs[i])
regs_ever_live[i] = 1; regs_ever_live[i] = 1;