stormy-abi: Updates to varargs descriptions.
* config/stormy16/stormy-abi: Updates to varargs descriptions. * config/stormy16/stormy16.c (stormy16_build_va_list): Reverse base and count fields. (stormy16_expand_builtin_va_start): last_reg_count changed to size_of_reg_args. Use count + size in first comparison. From-SVN: r46365
This commit is contained in:
parent
16f7dac7f5
commit
cf4c092e87
3 changed files with 29 additions and 13 deletions
|
@ -1,3 +1,11 @@
|
|||
2001-10-19 Catherine Moore <clm@redhat.com>
|
||||
|
||||
* config/stormy16/stormy-abi: Updates to varargs descriptions.
|
||||
* config/stormy16/stormy16.c (stormy16_build_va_list): Reverse
|
||||
base and count fields.
|
||||
(stormy16_expand_builtin_va_start): last_reg_count changed to
|
||||
size_of_reg_args. Use count + size in first comparison.
|
||||
|
||||
Fri Oct 19 15:24:39 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
|
||||
|
||||
* langhooks.h (LANG_HOOKS_HONOR_READONLY): New macro.
|
||||
|
|
|
@ -70,11 +70,13 @@ Both fields are 16 bits. An argument of size N bytes
|
|||
(N will be even) is accessed as if by the following code:
|
||||
|
||||
char *result;
|
||||
if (count + N > 16)
|
||||
/* count = #bytes non-variable arguments */
|
||||
/* 12 = #bytes for register arguments */
|
||||
if (count + N > 12)
|
||||
{
|
||||
if (count < 16)
|
||||
count = 16;
|
||||
result = base - (count + N - 16 + 4);
|
||||
if (count < 12)
|
||||
count = 12;
|
||||
result = base - (count + N - 12 + 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -98,8 +100,8 @@ SP ->
|
|||
r3
|
||||
count-> r2
|
||||
Return address (two words)
|
||||
9th procedure parameter word
|
||||
10th procedure parameter word
|
||||
7th procedure parameter word
|
||||
8th procedure parameter word
|
||||
...
|
||||
last procedure parameter word
|
||||
|
||||
|
|
|
@ -1131,9 +1131,9 @@ stormy16_build_va_list ()
|
|||
record = make_lang_type (RECORD_TYPE);
|
||||
type_decl = build_decl (TYPE_DECL, get_identifier ("__va_list_tag"), record);
|
||||
|
||||
f_2 = build_decl (FIELD_DECL, get_identifier ("base"),
|
||||
f_1 = build_decl (FIELD_DECL, get_identifier ("base"),
|
||||
ptr_type_node);
|
||||
f_1 = build_decl (FIELD_DECL, get_identifier ("count"),
|
||||
f_2 = build_decl (FIELD_DECL, get_identifier ("count"),
|
||||
unsigned_type_node);
|
||||
|
||||
DECL_FIELD_CONTEXT (f_1) = record;
|
||||
|
@ -1186,7 +1186,9 @@ stormy16_expand_builtin_va_start (stdarg_p, valist, nextarg)
|
|||
}
|
||||
|
||||
/* Implement the stdarg/varargs va_arg macro. VALIST is the variable
|
||||
of type va_list as a tree, TYPE is the type passed to va_arg. */
|
||||
of type va_list as a tree, TYPE is the type passed to va_arg.
|
||||
Note: This algorithm is documented in stormy-abi. */
|
||||
|
||||
rtx
|
||||
stormy16_expand_builtin_va_arg (valist, type)
|
||||
tree valist;
|
||||
|
@ -1197,8 +1199,9 @@ stormy16_expand_builtin_va_arg (valist, type)
|
|||
rtx count_rtx, addr_rtx, r;
|
||||
rtx lab_gotaddr, lab_fromstack;
|
||||
tree t;
|
||||
int size, last_reg_count;
|
||||
int size, size_of_reg_args;
|
||||
tree size_tree, count_plus_size;
|
||||
rtx count_plus_size_rtx;
|
||||
|
||||
f_base = TYPE_FIELDS (va_list_type_node);
|
||||
f_count = TREE_CHAIN (f_base);
|
||||
|
@ -1209,14 +1212,17 @@ stormy16_expand_builtin_va_arg (valist, type)
|
|||
size = PUSH_ROUNDING (int_size_in_bytes (type));
|
||||
size_tree = round_up (size_in_bytes (type), UNITS_PER_WORD);
|
||||
|
||||
last_reg_count = NUM_ARGUMENT_REGISTERS * UNITS_PER_WORD - size;
|
||||
size_of_reg_args = NUM_ARGUMENT_REGISTERS * UNITS_PER_WORD;
|
||||
|
||||
count_rtx = expand_expr (count, NULL_RTX, HImode, EXPAND_NORMAL);
|
||||
lab_gotaddr = gen_label_rtx ();
|
||||
lab_fromstack = gen_label_rtx ();
|
||||
addr_rtx = gen_reg_rtx (Pmode);
|
||||
emit_cmp_and_jump_insns (count_rtx, GEN_INT (last_reg_count),
|
||||
GTU, const1_rtx, HImode, 1, 1, lab_fromstack);
|
||||
|
||||
count_plus_size = build (PLUS_EXPR, TREE_TYPE (count), count, size_tree);
|
||||
count_plus_size_rtx = expand_expr (count_plus_size, NULL_RTX, HImode, EXPAND_NORMAL);
|
||||
emit_cmp_and_jump_insns (count_plus_size_rtx, GEN_INT (size_of_reg_args),
|
||||
GTU, const1_rtx, HImode, 1, 1, lab_fromstack);
|
||||
|
||||
t = build (PLUS_EXPR, ptr_type_node, base, count);
|
||||
r = expand_expr (t, addr_rtx, Pmode, EXPAND_NORMAL);
|
||||
|
|
Loading…
Add table
Reference in a new issue