diff options
-rw-r--r-- | gcc/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/config/arm/arm.c | 4 |
2 files changed, 9 insertions, 0 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 8502ba0..806a057 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,8 @@ +2007-07-12 Paul Brook <paul@codesourcery.com> + + * config/arm/arm.c (thumb1_compute_save_reg_mask): Make sure scratch + reg does not overlap return value. + 2007-07-12 Daniel Berlin <dberlin@dberlin.org> * 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 6e99371..5569d4a 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; |