Mercurial > hg > CbC > CbC_gcc
diff gcc/caller-save.c @ 132:d34655255c78
update gcc-8.2
author | mir3636 |
---|---|
date | Thu, 25 Oct 2018 10:21:07 +0900 |
parents | 84e7813d76e9 |
children | 1830386684a0 |
line wrap: on
line diff
--- a/gcc/caller-save.c Thu Oct 25 08:08:40 2018 +0900 +++ b/gcc/caller-save.c Thu Oct 25 10:21:07 2018 +0900 @@ -1,5 +1,5 @@ /* Save and restore call-clobbered registers which are live across a call. - Copyright (C) 1989-2017 Free Software Foundation, Inc. + Copyright (C) 1989-2018 Free Software Foundation, Inc. This file is part of GCC. @@ -88,7 +88,7 @@ static void mark_referenced_regs (rtx *, refmarker_fn *mark, void *mark_arg); static refmarker_fn mark_reg_as_referenced; static refmarker_fn replace_reg_with_saved_mem; -static int insert_save (struct insn_chain *, int, int, HARD_REG_SET *, +static int insert_save (struct insn_chain *, int, HARD_REG_SET *, machine_mode *); static int insert_restore (struct insn_chain *, int, int, int, machine_mode *); @@ -607,9 +607,9 @@ break; } if (k < 0 - && (GET_MODE_SIZE (regno_save_mode[regno][1]) - <= GET_MODE_SIZE (regno_save_mode - [saved_reg2->hard_regno][1]))) + && known_le (GET_MODE_SIZE (regno_save_mode[regno][1]), + GET_MODE_SIZE (regno_save_mode + [saved_reg2->hard_regno][1]))) { saved_reg->slot = adjust_address_nv @@ -631,8 +631,8 @@ slot = prev_save_slots[j]; if (slot == NULL_RTX) continue; - if (GET_MODE_SIZE (regno_save_mode[regno][1]) - <= GET_MODE_SIZE (GET_MODE (slot)) + if (known_le (GET_MODE_SIZE (regno_save_mode[regno][1]), + GET_MODE_SIZE (GET_MODE (slot))) && best_slot_num < 0) best_slot_num = j; if (GET_MODE (slot) == regno_save_mode[regno][1]) @@ -861,7 +861,8 @@ for (regno = 0; regno < FIRST_PSEUDO_REGISTER; regno++) if (TEST_HARD_REG_BIT (hard_regs_to_save, regno)) - regno += insert_save (chain, 1, regno, &hard_regs_to_save, save_mode); + regno += insert_save (chain, regno, + &hard_regs_to_save, save_mode); /* Must recompute n_regs_saved. */ n_regs_saved = 0; @@ -1129,7 +1130,7 @@ { /* This is gen_lowpart_if_possible(), but without validating the newly-formed address. */ - HOST_WIDE_INT offset = byte_lowpart_offset (mode, GET_MODE (mem)); + poly_int64 offset = byte_lowpart_offset (mode, GET_MODE (mem)); mem = adjust_address_nv (mem, mode, offset); } } @@ -1147,7 +1148,8 @@ machine_mode smode = save_mode[regno]; gcc_assert (smode != VOIDmode); if (hard_regno_nregs (regno, smode) > 1) - smode = mode_for_size (GET_MODE_SIZE (mode) / nregs, + smode = mode_for_size (exact_div (GET_MODE_BITSIZE (mode), + nregs), GET_MODE_CLASS (mode), 0).require (); XVECEXP (mem, 0, i) = gen_rtx_REG (smode, regno + i); } @@ -1251,7 +1253,7 @@ /* Like insert_restore above, but save registers instead. */ static int -insert_save (struct insn_chain *chain, int before_p, int regno, +insert_save (struct insn_chain *chain, int regno, HARD_REG_SET *to_save, machine_mode *save_mode) { int i; @@ -1313,7 +1315,7 @@ pat = gen_rtx_SET (mem, gen_rtx_REG (GET_MODE (mem), regno)); code = reg_save_code (regno, GET_MODE (mem)); - new_chain = insert_one_insn (chain, before_p, code, pat); + new_chain = insert_one_insn (chain, 1, code, pat); /* Set hard_regs_saved and dead_or_set for all the registers we saved. */ for (k = 0; k < numregs; k++)