aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1994-07-08 13:52:11 -0700
committerJim Wilson <wilson@gcc.gnu.org>1994-07-08 13:52:11 -0700
commit55be783d95e0001fad3463718481e10d3f502b7d (patch)
treeef7afc36e18e2e25b6b469824167b4a88eecb233 /gcc
parentd93d4205f1090161c32033c608dec5ac67016ab9 (diff)
downloadgcc-55be783d95e0001fad3463718481e10d3f502b7d.zip
gcc-55be783d95e0001fad3463718481e10d3f502b7d.tar.gz
gcc-55be783d95e0001fad3463718481e10d3f502b7d.tar.bz2
(SECONDARY_MEMORY_NEEDED_RTX): Call assign_stack_local
if the frame has zero size. From-SVN: r7682
Diffstat (limited to 'gcc')
-rw-r--r--gcc/config/sparc/sparc.h11
1 files changed, 8 insertions, 3 deletions
diff --git a/gcc/config/sparc/sparc.h b/gcc/config/sparc/sparc.h
index c9339c2..1fb1bf0 100644
--- a/gcc/config/sparc/sparc.h
+++ b/gcc/config/sparc/sparc.h
@@ -1072,10 +1072,15 @@ extern char leaf_reg_remap[];
GENERAL_REGS and FP_REGS. */
#define SECONDARY_MEMORY_NEEDED(CLASS1, CLASS2, MODE) ((CLASS1) != (CLASS2))
-/* Return the stack location to use for secondary memory needed reloads. */
+/* Return the stack location to use for secondary memory needed reloads.
+ We want to use the reserved location just below the frame pointer.
+ However, we must ensure that there is a frame, so use assign_stack_local
+ if the frame size is zero. */
#define SECONDARY_MEMORY_NEEDED_RTX(MODE) \
- gen_rtx (MEM, MODE, gen_rtx (PLUS, Pmode, frame_pointer_rtx, \
- GEN_INT (STARTING_FRAME_OFFSET)))
+ (get_frame_size () == 0 \
+ ? assign_stack_local (mode, GET_MODE_SIZE (mode), 0) \
+ : gen_rtx (MEM, MODE, gen_rtx (PLUS, Pmode, frame_pointer_rtx, \
+ GEN_INT (STARTING_FRAME_OFFSET))))
/* Get_secondary_mem widens it's argument to BITS_PER_WORD which loses on v9
because the movsi and movsf patterns don't handle r/f moves.