diff options
author | Jim Wilson <wilson@gcc.gnu.org> | 1994-07-08 13:52:11 -0700 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 1994-07-08 13:52:11 -0700 |
commit | 55be783d95e0001fad3463718481e10d3f502b7d (patch) | |
tree | ef7afc36e18e2e25b6b469824167b4a88eecb233 /gcc | |
parent | d93d4205f1090161c32033c608dec5ac67016ab9 (diff) | |
download | gcc-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.h | 11 |
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. |