diff options
-rw-r--r-- | gnu/egcs/gcc/config/m88k/m88k.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/gnu/egcs/gcc/config/m88k/m88k.c b/gnu/egcs/gcc/config/m88k/m88k.c index 2c06349c40b..d504e9719fd 100644 --- a/gnu/egcs/gcc/config/m88k/m88k.c +++ b/gnu/egcs/gcc/config/m88k/m88k.c @@ -2564,8 +2564,7 @@ m88k_function_arg (args_so_far, mode, type, named) return (rtx) 0; /* args have exhausted registers */ else if (mode == BLKmode - && (TYPE_ALIGN (type) != BITS_PER_WORD - || bytes != UNITS_PER_WORD)) + && (TYPE_ALIGN (type) != BITS_PER_WORD || bytes != UNITS_PER_WORD)) return (rtx) 0; return gen_rtx (REG, @@ -2590,10 +2589,16 @@ m88k_function_arg_advance (args_so_far, mode, type, named) if ((type != 0) && (TREE_CODE(type) == RECORD_TYPE || TREE_CODE(type) == UNION_TYPE)) mode = BLKmode; + bytes = (mode != BLKmode) ? GET_MODE_SIZE (mode) : int_size_in_bytes(type); if ((*args_so_far & 1) && (mode == DImode || mode == DFmode || ((type != 0) && TYPE_ALIGN (type) > BITS_PER_WORD))) (*args_so_far)++; + + if (mode == BLKmode + && (TYPE_ALIGN (type) != BITS_PER_WORD || bytes != UNITS_PER_WORD)) + return; + (*args_so_far) += (bytes + UNITS_PER_WORD - 1) / UNITS_PER_WORD; } |