aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2003-07-21 22:18:52 +0200
committerJakub Jelinek <jakub@gcc.gnu.org>2003-07-21 22:18:52 +0200
commit8c29550d3c6fbc405e1039246ae4425c7cbb8d3b (patch)
treeecc1e8adb5b895c328d969409e5b50536d2d04f8 /gcc
parent92cbea22145792b5f621a6ee277bad91876f40ff (diff)
downloadgcc-8c29550d3c6fbc405e1039246ae4425c7cbb8d3b.zip
gcc-8c29550d3c6fbc405e1039246ae4425c7cbb8d3b.tar.gz
gcc-8c29550d3c6fbc405e1039246ae4425c7cbb8d3b.tar.bz2
rs6000.h (machine_function): Add ra_need_lr.
* config/rs6000/rs6000.h (machine_function): Add ra_need_lr. * config/rs6000/rs6000.c (rs6000_return_addr): Set it. (rs6000_emit_prologue): Save FPRs inline if set. From-SVN: r69645
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog6
-rw-r--r--gcc/config/rs6000/rs6000.c4
-rw-r--r--gcc/config/rs6000/rs6000.h2
3 files changed, 11 insertions, 1 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 0b2247a..cd57ee3 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2003-07-21 Jakub Jelinek <jakub@redhat.com>
+
+ * config/rs6000/rs6000.h (machine_function): Add ra_need_lr.
+ * config/rs6000/rs6000.c (rs6000_return_addr): Set it.
+ (rs6000_emit_prologue): Save FPRs inline if set.
+
2003-07-21 H.J. Lu <hongjiu.lu@intel.com>
* config/ia64/ia64.md (prefetch): Support predicate.
diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c
index 8f26897..580d951 100644
--- a/gcc/config/rs6000/rs6000.c
+++ b/gcc/config/rs6000/rs6000.c
@@ -10542,6 +10542,7 @@ rs6000_return_addr (count, frame)
RETURN_ADDRESS_OFFSET)));
}
+ cfun->machine->ra_need_lr = 1;
return get_hard_reg_initial_val (Pmode, LINK_REGISTER_REGNUM);
}
@@ -11252,7 +11253,8 @@ rs6000_emit_prologue ()
|| info->spe_64bit_regs_used == 0)
&& info->first_gp_reg_save < 31);
saving_FPRs_inline = (info->first_fp_reg_save == 64
- || FP_SAVE_INLINE (info->first_fp_reg_save));
+ || FP_SAVE_INLINE (info->first_fp_reg_save)
+ || cfun->machine->ra_need_lr);
/* For V.4, update stack before we do any saving and set back pointer. */
if (info->push_p
diff --git a/gcc/config/rs6000/rs6000.h b/gcc/config/rs6000/rs6000.h
index 5ba18dc..dd10fa9 100644
--- a/gcc/config/rs6000/rs6000.h
+++ b/gcc/config/rs6000/rs6000.h
@@ -1708,6 +1708,8 @@ typedef struct machine_function GTY(())
const char *some_ld_name;
/* Whether the instruction chain has been scanned already. */
int insn_chain_scanned_p;
+ /* Flags if __builtin_return_address (0) was used. */
+ int ra_need_lr;
} machine_function;
/* Define a data type for recording info about an argument list