2002-06-06 Michael Snyder <msnyder@redhat.com>
* d10v-tdep.c (d10v_push_arguments): Handle struct_return. Delete extra braces and re-indent.
This commit is contained in:
parent
3d79a47c75
commit
7bd91a28eb
|
@ -1,6 +1,8 @@
|
|||
2002-06-06 Michael Snyder <msnyder@redhat.com>
|
||||
|
||||
* d10v-tdep.c (d10v_store_return_value): Char return values
|
||||
* d10v-tdep.c (d10v_push_arguments): Handle struct_return.
|
||||
Delete extra braces and re-indent.
|
||||
(d10v_store_return_value): Char return values
|
||||
must be shifted over by one byte in R0.
|
||||
(d10v_extract_return_value): Delete extra braces, re-indent.
|
||||
|
||||
|
|
|
@ -1086,6 +1086,15 @@ d10v_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
|
|||
int i;
|
||||
int regnum = ARG1_REGNUM;
|
||||
struct stack_item *si = NULL;
|
||||
long val;
|
||||
|
||||
/* If struct_return is true, then the struct return address will
|
||||
consume one argument-passing register. No need to actually
|
||||
write the value to the register -- that's done by
|
||||
d10v_store_struct_return(). */
|
||||
|
||||
if (struct_return)
|
||||
regnum++;
|
||||
|
||||
/* Fill in registers and arg lists */
|
||||
for (i = 0; i < nargs; i++)
|
||||
|
@ -1094,13 +1103,13 @@ d10v_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
|
|||
struct type *type = check_typedef (VALUE_TYPE (arg));
|
||||
char *contents = VALUE_CONTENTS (arg);
|
||||
int len = TYPE_LENGTH (type);
|
||||
/* printf ("push: type=%d len=%d\n", TYPE_CODE (type), len); */
|
||||
{
|
||||
int aligned_regnum = (regnum + 1) & ~1;
|
||||
|
||||
/* printf ("push: type=%d len=%d\n", TYPE_CODE (type), len); */
|
||||
if (len <= 2 && regnum <= ARGN_REGNUM)
|
||||
/* fits in a single register, do not align */
|
||||
{
|
||||
long val = extract_unsigned_integer (contents, len);
|
||||
val = extract_unsigned_integer (contents, len);
|
||||
write_register (regnum++, val);
|
||||
}
|
||||
else if (len <= (ARGN_REGNUM - aligned_regnum + 1) * 2)
|
||||
|
@ -1111,12 +1120,12 @@ d10v_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
|
|||
regnum = aligned_regnum;
|
||||
for (b = 0; b < (len & ~1); b += 2)
|
||||
{
|
||||
long val = extract_unsigned_integer (&contents[b], 2);
|
||||
val = extract_unsigned_integer (&contents[b], 2);
|
||||
write_register (regnum++, val);
|
||||
}
|
||||
if (b < len)
|
||||
{
|
||||
long val = extract_unsigned_integer (&contents[b], 1);
|
||||
val = extract_unsigned_integer (&contents[b], 1);
|
||||
write_register (regnum++, (val << 8));
|
||||
}
|
||||
}
|
||||
|
@ -1127,7 +1136,6 @@ d10v_push_arguments (int nargs, struct value **args, CORE_ADDR sp,
|
|||
si = push_stack_item (si, contents, len);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
while (si)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue