diff options
author | rask <rask@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-06-20 19:57:32 +0000 |
---|---|---|
committer | rask <rask@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-06-20 19:57:32 +0000 |
commit | ed16d6588f66bfe8ee1cb4747ce2ff459e7018fb (patch) | |
tree | 0d5f5987a4bc7f7bc3e555475062f5d7f03b578d /gcc/config/m32c | |
parent | bdeaf25e3a5c775c5e11cf11ecef9ed68bf87a3e (diff) | |
download | gcc-ed16d6588f66bfe8ee1cb4747ce2ff459e7018fb.tar.gz |
2007-06-20 Rask Ingemann Lambertsen <rask@sygehus.dk>
PR target/32335
* config/m32c/m32c.c (m32c_emit_epilogue): Use new HImode epilogue
for TARGET_A16.
* config/m32c/prologue.md (epilogue_exitd_16): New.
(epilogue_reit_16): New.
(epilogue_exitd): Rename to epilogue_exitd_24.
(epilogue_reit): Rename to epilogue_reit_24.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@125892 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/config/m32c')
-rw-r--r-- | gcc/config/m32c/m32c.c | 9 | ||||
-rw-r--r-- | gcc/config/m32c/prologue.md | 36 |
2 files changed, 37 insertions, 8 deletions
diff --git a/gcc/config/m32c/m32c.c b/gcc/config/m32c/m32c.c index 097c3a3a83d..161d5edd282 100644 --- a/gcc/config/m32c/m32c.c +++ b/gcc/config/m32c/m32c.c @@ -4026,12 +4026,17 @@ m32c_emit_epilogue (void) else emit_insn (gen_poppsi (gen_rtx_REG (PSImode, FP_REGNO))); emit_insn (gen_popm (GEN_INT (cfun->machine->intr_pushm))); - emit_jump_insn (gen_epilogue_reit (GEN_INT (TARGET_A16 ? 4 : 6))); + if (TARGET_A16) + emit_jump_insn (gen_epilogue_reit_16 ()); + else + emit_jump_insn (gen_epilogue_reit_24 ()); } else if (cfun->machine->use_rts) emit_jump_insn (gen_epilogue_rts ()); + else if (TARGET_A16) + emit_jump_insn (gen_epilogue_exitd_16 ()); else - emit_jump_insn (gen_epilogue_exitd (GEN_INT (TARGET_A16 ? 2 : 4))); + emit_jump_insn (gen_epilogue_exitd_24 ()); emit_barrier (); } diff --git a/gcc/config/m32c/prologue.md b/gcc/config/m32c/prologue.md index 81d35a1c965..23a38f0a228 100644 --- a/gcc/config/m32c/prologue.md +++ b/gcc/config/m32c/prologue.md @@ -102,26 +102,50 @@ [(set_attr "flags" "x")] ) -(define_insn "epilogue_exitd" +(define_insn "epilogue_exitd_16" + [(set (reg:HI SP_REGNO) + (plus:HI (reg:HI FB_REGNO) + (const_int 2))) + (set (reg:HI FB_REGNO) + (mem:HI (reg:HI FB_REGNO))) + (return) + ] + "TARGET_A16" + "exitd" + [(set_attr "flags" "x")] + ) + +(define_insn "epilogue_reit_16" + [(set (reg:HI SP_REGNO) + (plus:HI (reg:HI SP_REGNO) + (const_int 4))) + (return) + ] + "TARGET_A16" + "reit" + [(set_attr "flags" "x")] + ) + +(define_insn "epilogue_exitd_24" [(set (reg:PSI SP_REGNO) (plus:PSI (reg:PSI FB_REGNO) - (match_operand 0 "const_int_operand" "i"))) + (const_int 4))) (set (reg:PSI FB_REGNO) (mem:PSI (reg:PSI FB_REGNO))) (return) ] - "" + "TARGET_A24" "exitd" [(set_attr "flags" "x")] ) -(define_insn "epilogue_reit" +(define_insn "epilogue_reit_24" [(set (reg:PSI SP_REGNO) (plus:PSI (reg:PSI SP_REGNO) - (match_operand 0 "const_int_operand" "i"))) + (const_int 6))) (return) ] - "" + "TARGET_A24" "reit" [(set_attr "flags" "x")] ) |