diff options
author | Paul Brook <paul@codesourcery.com> | 2007-07-12 21:28:27 +0000 |
---|---|---|
committer | Paul Brook <pbrook@gcc.gnu.org> | 2007-07-12 21:28:27 +0000 |
commit | 19e723f40b83dd72416f4a4f1f9640c826bef8eb (patch) | |
tree | 6f71e2b7e962f81d365145e3066fcac841769bf3 | |
parent | 2fe5bb9b5e28ea5587110f4513edd737eede546c (diff) | |
download | gcc-19e723f40b83dd72416f4a4f1f9640c826bef8eb.zip gcc-19e723f40b83dd72416f4a4f1f9640c826bef8eb.tar.gz gcc-19e723f40b83dd72416f4a4f1f9640c826bef8eb.tar.bz2 |
arm.c (thumb1_compute_save_reg_mask): Make sure scratch reg does not overlap return value.
2007-07-12 Paul Brook <paul@codesourcery.com>
gcc/
* config/arm/arm.c (thumb1_compute_save_reg_mask): Make sure scratch
reg does not overlap return value.
From-SVN: r126604
-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; |