diff options
author | amodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-07-14 05:17:18 +0000 |
---|---|---|
committer | amodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4> | 2003-07-14 05:17:18 +0000 |
commit | 5f4cd67005584e138e0b4bcb4cc9769cb8faba64 (patch) | |
tree | d7df914db340221693c15fa50acf2fcb2f8905f0 /gcc/expr.h | |
parent | 56e757391a3c9d99a0f4b50296839831fa35d97e (diff) | |
download | gcc-5f4cd67005584e138e0b4bcb4cc9769cb8faba64.tar.gz |
* doc/tm.texi (BLOCK_REG_PADDING): Describe.
* expr.h (struct locate_and_pad_arg_data): Add where_pad.
(emit_group_load, emit_group_store): Adjust declarations.
Remove most occurrences of #ifdef TREE_CODE.
* expr.c (emit_group_load): Add "type" param, and use
BLOCK_REG_PADDING to determine need for a shift. Optimize non-
aligned accesses if !SLOW_UNALIGNED_ACCESS.
(emit_group_store): Likewise.
(emit_push_insn, expand_assignment, store_expr, expand_expr): Adjust
emit_group_load and emit_group_store calls.
* calls.c (store_unaligned_arguments_into_pseudos): Tidy. Use
BLOCK_REG_PADDING to determine whether we need endian_correction.
(load_register_parameters): Localize vars. Handle shifting of
small values to the correct end of regs. Adjust emit_group_load
call.
(expand_call, emit_library_call_value_1): Adjust emit_group_load
and emit_group_store calls.
* function.c (assign_parms): Set mem alignment for stack slots.
Adjust emit_group_store call. Store values at the "wrong" end
of regs to the stack. Use BLOCK_REG_PADDING.
(locate_and_pad_parm): Save where_pad.
(expand_function_end): Adjust emit_group_load call.
* stmt.c (expand_value_return): Adjust emit_group_load call.
* Makefile.in (calls.o): Depend on $(OPTABS_H).
* config/rs6000/linux64.h (TARGET_LITTLE_ENDIAN): Redefine as 0.
(AGGREGATE_PADDING_FIXED, AGGREGATES_PAD_UPWARD_ALWAYS): Define.
(MUST_PASS_IN_STACK): Define.
(BLOCK_REG_PADDING): Define.
* config/rs6000/rs6000.h (struct rs6000_args): Remove orig_nargs.
(PAD_VARARGS_DOWN): Define in terms of FUNCTION_ARG_PADDING.
* config/rs6000/rs6000.c (init_cumulative_args): Don't set orig_nargs.
(function_arg_padding): !AGGREGATE_PADDING_FIXED compatibility code.
Act on AGGREGATES_PAD_UPWARD_ALWAYS.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@69318 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/expr.h')
-rw-r--r-- | gcc/expr.h | 25 |
1 files changed, 7 insertions, 18 deletions
diff --git a/gcc/expr.h b/gcc/expr.h index ddf8505fa87..ba84fd02ae8 100644 --- a/gcc/expr.h +++ b/gcc/expr.h @@ -68,7 +68,6 @@ enum expand_modifier {EXPAND_NORMAL = 0, EXPAND_STACK_PARM = 2, EXPAND_SUM, enum direction {none, upward, downward}; -#ifdef TREE_CODE /* Don't lose if tree.h not included. */ /* Structure to record the size of a sequence of arguments as the sum of a tree-expression and a constant. This structure is also used to store offsets from the stack, which might be negative, @@ -96,8 +95,9 @@ struct locate_and_pad_arg_data /* The amount that the stack pointer needs to be adjusted to force alignment for the next argument. */ struct args_size alignment_pad; + /* Which way we should pad this arg. */ + enum direction where_pad; }; -#endif /* Add the value of the tree INC to the `struct args_size' TO. */ @@ -427,7 +427,7 @@ extern rtx gen_group_rtx (rtx); /* Load a BLKmode value into non-consecutive registers represented by a PARALLEL. */ -extern void emit_group_load (rtx, rtx, int); +extern void emit_group_load (rtx, rtx, tree, int); /* Move a non-consecutive group of registers represented by a PARALLEL into a non-consecutive group of registers represented by a PARALLEL. */ @@ -435,12 +435,10 @@ extern void emit_group_move (rtx, rtx); /* Store a BLKmode value from non-consecutive registers represented by a PARALLEL. */ -extern void emit_group_store (rtx, rtx, int); +extern void emit_group_store (rtx, rtx, tree, int); -#ifdef TREE_CODE /* Copy BLKmode object from a set of registers. */ extern rtx copy_blkmode_from_reg (rtx, rtx, tree); -#endif /* Mark REG as holding a parameter for the next CALL_INSN. */ extern void use_reg (rtx *, rtx); @@ -490,7 +488,6 @@ extern rtx emit_move_insn_1 (rtx, rtx); and return an rtx to address the beginning of the block. */ extern rtx push_block (rtx, int, int); -#ifdef TREE_CODE /* Generate code to push something onto the stack, given its mode and type. */ extern void emit_push_insn (rtx, enum machine_mode, tree, rtx, unsigned int, int, rtx, int, rtx, rtx, int, rtx); @@ -503,7 +500,6 @@ extern rtx expand_assignment (tree, tree, int, int); If SUGGEST_REG is nonzero, copy the value through a register and return that register, if that is possible. */ extern rtx store_expr (tree, rtx, int); -#endif /* Given an rtx that may include add and multiply operations, generate them as insns and return a pseudo-reg containing the value. @@ -535,7 +531,6 @@ extern void clear_pending_stack_adjust (void); /* Pop any previously-pushed arguments that have not been popped yet. */ extern void do_pending_stack_adjust (void); -#ifdef TREE_CODE /* Return the tree node and offset if a given argument corresponds to a string constant. */ extern tree string_constant (tree, tree *); @@ -549,7 +544,6 @@ extern void jumpif (tree, rtx); /* Generate code to evaluate EXP and jump to IF_FALSE_LABEL if the result is zero, or IF_TRUE_LABEL if the result is one. */ extern void do_jump (tree, rtx, rtx); -#endif /* Generate rtl to compare two rtx's, will call emit_cmp_insn. */ extern rtx compare_from_rtx (rtx, rtx, enum rtx_code, int, enum machine_mode, @@ -566,7 +560,6 @@ extern int try_tablejump (tree, tree, tree, tree, rtx, rtx); extern unsigned int case_values_threshold (void); -#ifdef TREE_CODE /* rtl.h and tree.h were included. */ /* Return an rtx for the size in bytes of the value of an expr. */ extern rtx expr_size (tree); @@ -592,10 +585,13 @@ extern rtx prepare_call_address (rtx, tree, rtx *, int, int); extern rtx expand_call (tree, rtx, int); +#ifdef TREE_CODE extern rtx expand_shift (enum tree_code, enum machine_mode, rtx, tree, rtx, int); extern rtx expand_divmod (int, enum tree_code, enum machine_mode, rtx, rtx, rtx, int); +#endif + extern void locate_and_pad_parm (enum machine_mode, tree, int, int, tree, struct args_size *, struct locate_and_pad_arg_data *); @@ -608,7 +604,6 @@ extern rtx label_rtx (tree); list of its containing function (i.e. it is treated as reachable even if how is not obvious). */ extern rtx force_label_rtx (tree); -#endif /* Indicate how an input argument register was promoted. */ extern rtx promoted_input_arg (unsigned int, enum machine_mode *, int *); @@ -691,7 +686,6 @@ extern rtx widen_memory_access (rtx, enum machine_mode, HOST_WIDE_INT); valid address. */ extern rtx validize_mem (rtx); -#ifdef TREE_CODE /* Given REF, either a MEM or a REG, and T, either the type of X or the expression corresponding to REF, set RTX_UNCHANGING_P if appropriate. */ @@ -706,7 +700,6 @@ extern void set_mem_attributes (rtx, tree, int); we alter MEM_OFFSET according to T then we should subtract BITPOS expecting that it'll be added back in later. */ extern void set_mem_attributes_minus_bitpos (rtx, tree, int, HOST_WIDE_INT); -#endif /* Assemble the static constant template for function entry trampolines. */ extern rtx assemble_trampoline_template (void); @@ -738,10 +731,8 @@ extern rtx force_reg (enum machine_mode, rtx); /* Return given rtx, copied into a new temp reg if it was in memory. */ extern rtx force_not_mem (rtx); -#ifdef TREE_CODE /* Return mode and signedness to use when object is promoted. */ extern enum machine_mode promote_mode (tree, enum machine_mode, int *, int); -#endif /* Remove some bytes from the stack. An rtx says how many. */ extern void adjust_stack (rtx); @@ -812,9 +803,7 @@ extern void do_jump_by_parts_equality_rtx (rtx, rtx, rtx); extern void do_jump_by_parts_greater_rtx (enum machine_mode, int, rtx, rtx, rtx, rtx); -#ifdef TREE_CODE /* Don't lose if tree.h not included. */ extern void mark_seen_cases (tree, unsigned char *, HOST_WIDE_INT, int); -#endif extern int vector_mode_valid_p (enum machine_mode); |