diff options
Diffstat (limited to 'gcc/expr.h')
-rw-r--r-- | gcc/expr.h | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/gcc/expr.h b/gcc/expr.h index 7e157cdf302..dfd83d43c23 100644 --- a/gcc/expr.h +++ b/gcc/expr.h @@ -63,6 +63,8 @@ enum expand_modifier {EXPAND_NORMAL = 0, EXPAND_STACK_PARM = 2, EXPAND_SUM, more information. */ #define OK_DEFER_POP (inhibit_defer_pop -= 1) +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 @@ -74,6 +76,24 @@ struct args_size HOST_WIDE_INT constant; tree var; }; + +/* Package up various arg related fields of struct args for + locate_and_pad_parm. */ +struct locate_and_pad_arg_data +{ + /* Size of this argument on the stack, rounded up for any padding it + gets. If REG_PARM_STACK_SPACE is defined, then register parms are + counted here, otherwise they aren't. */ + struct args_size size; + /* Offset of this argument from beginning of stack-args. */ + struct args_size offset; + /* Offset to the start of the stack slot. Different from OFFSET + if this arg pads downward. */ + struct args_size slot_offset; + /* The amount that the stack pointer needs to be adjusted to + force alignment for the next argument. */ + struct args_size alignment_pad; +}; #endif /* Add the value of the tree INC to the `struct args_size' TO. */ @@ -119,8 +139,6 @@ do { \ usually pad upward, but pad short args downward on big-endian machines. */ -enum direction {none, upward, downward}; /* Value has this type. */ - #ifndef FUNCTION_ARG_PADDING #define FUNCTION_ARG_PADDING(MODE, TYPE) \ (! BYTES_BIG_ENDIAN \ @@ -570,11 +588,9 @@ extern rtx expand_shift PARAMS ((enum tree_code, enum machine_mode, rtx, tree, rtx, int)); extern rtx expand_divmod PARAMS ((int, enum tree_code, enum machine_mode, rtx, rtx, rtx, int)); -extern void locate_and_pad_parm PARAMS ((enum machine_mode, tree, int, tree, - struct args_size *, - struct args_size *, - struct args_size *, - struct args_size *)); +extern void locate_and_pad_parm PARAMS ((enum machine_mode, tree, int, int, + tree, struct args_size *, + struct locate_and_pad_arg_data *)); extern rtx expand_inline_function PARAMS ((tree, tree, rtx, int, tree, rtx)); /* Return the CODE_LABEL rtx for a LABEL_DECL, creating it if necessary. */ |