From 19e723f40b83dd72416f4a4f1f9640c826bef8eb Mon Sep 17 00:00:00 2001 From: Paul Brook Date: Thu, 12 Jul 2007 21:28:27 +0000 Subject: 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 --- gcc/ChangeLog | 5 +++++ gcc/config/arm/arm.c | 4 ++++ 2 files changed, 9 insertions(+) (limited to 'gcc') 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 + + * 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 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; -- cgit v1.1