From: Paul Brook Date: Thu, 12 Jul 2007 21:28:27 +0000 (+0000) Subject: arm.c (thumb1_compute_save_reg_mask): Make sure scratch reg does not overlap return... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=19e723f40b83dd72416f4a4f1f9640c826bef8eb;p=gcc.git arm.c (thumb1_compute_save_reg_mask): Make sure scratch reg does not overlap return value. 2007-07-12 Paul Brook gcc/ * config/arm/arm.c (thumb1_compute_save_reg_mask): Make sure scratch reg does not overlap return value. From-SVN: r126604 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8502ba0d021..806a0579736 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2007-07-12 Paul Brook + + * config/arm/arm.c (thumb1_compute_save_reg_mask): Make sure scratch + reg does not overlap return value. + 2007-07-12 Daniel Berlin * tree-ssa-pre.c (get_expression_vuses): Move out side-effect. diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c index 6e993710227..5569d4a615b 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -10182,6 +10182,10 @@ thumb1_compute_save_reg_mask (void) have to push it. Use LAST_LO_REGNUM as our fallback choice for the register to select. */ reg = thumb_find_work_register (1 << LAST_LO_REGNUM); + /* Make sure the register returned by thumb_find_work_register is + not part of the return value. */ + if (reg * UNITS_PER_WORD <= arm_size_return_regs ()) + reg = LAST_LO_REGNUM; if (! call_used_regs[reg]) mask |= 1 << reg;