re PR target/32335 (libgcc build failure, ICE in cselib_record_set, at cselib.c:1508)

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.

From-SVN: r125892
parent b631c5f7
...@@ -4026,12 +4026,17 @@ m32c_emit_epilogue (void) ...@@ -4026,12 +4026,17 @@ m32c_emit_epilogue (void)
else else
emit_insn (gen_poppsi (gen_rtx_REG (PSImode, FP_REGNO))); emit_insn (gen_poppsi (gen_rtx_REG (PSImode, FP_REGNO)));
emit_insn (gen_popm (GEN_INT (cfun->machine->intr_pushm))); 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) else if (cfun->machine->use_rts)
emit_jump_insn (gen_epilogue_rts ()); emit_jump_insn (gen_epilogue_rts ());
else if (TARGET_A16)
emit_jump_insn (gen_epilogue_exitd_16 ());
else else
emit_jump_insn (gen_epilogue_exitd (GEN_INT (TARGET_A16 ? 2 : 4))); emit_jump_insn (gen_epilogue_exitd_24 ());
emit_barrier (); emit_barrier ();
} }
......
...@@ -102,26 +102,50 @@ ...@@ -102,26 +102,50 @@
[(set_attr "flags" "x")] [(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) [(set (reg:PSI SP_REGNO)
(plus:PSI (reg:PSI FB_REGNO) (plus:PSI (reg:PSI FB_REGNO)
(match_operand 0 "const_int_operand" "i"))) (const_int 4)))
(set (reg:PSI FB_REGNO) (set (reg:PSI FB_REGNO)
(mem:PSI (reg:PSI FB_REGNO))) (mem:PSI (reg:PSI FB_REGNO)))
(return) (return)
] ]
"" "TARGET_A24"
"exitd" "exitd"
[(set_attr "flags" "x")] [(set_attr "flags" "x")]
) )
(define_insn "epilogue_reit" (define_insn "epilogue_reit_24"
[(set (reg:PSI SP_REGNO) [(set (reg:PSI SP_REGNO)
(plus:PSI (reg:PSI SP_REGNO) (plus:PSI (reg:PSI SP_REGNO)
(match_operand 0 "const_int_operand" "i"))) (const_int 6)))
(return) (return)
] ]
"" "TARGET_A24"
"reit" "reit"
[(set_attr "flags" "x")] [(set_attr "flags" "x")]
) )
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment