Commit 61945d8c by Joseph Myers Committed by Joseph Myers

re PR target/36827 (newlib:libm/math/k_rem_pio2.c fails in reload)

	PR target/36827
	* config/m32c/m32c.c (BIG_FB_ADJ): Move definition earlier.
	(m32c_legitimate_address_p): Handle "++rii" addresses created by
	m32c_legitimize_reload_address.

From-SVN: r137875
parent 751a3fca
2008-07-16 Joseph Myers <joseph@codesourcery.com>
PR target/36827
* config/m32c/m32c.c (BIG_FB_ADJ): Move definition earlier.
(m32c_legitimate_address_p): Handle "++rii" addresses created by
m32c_legitimize_reload_address.
2007-07-16 Rafael Avila de Espindola <espindola@google.com>
* c-decl.c (merge_decls): Keep DECL_SOURCE_LOCATION and
......
......@@ -1778,6 +1778,8 @@ m32c_init_libfuncs (void)
/* Addressing Modes */
#define BIG_FB_ADJ 0
/* Used by GO_IF_LEGITIMATE_ADDRESS. The r8c/m32c family supports a
wide range of non-orthogonal addressing modes, including the
ability to double-indirect on *some* of them. Not all insns
......@@ -1895,6 +1897,17 @@ m32c_legitimate_address_p (enum machine_mode mode, rtx x, int strict)
return 0;
}
}
if (RTX_IS ("++rii"))
{
rtx reg = patternr[2];
HOST_WIDE_INT offs = INTVAL (patternr[3]);
/* Avoid reloads for addresses generated by
m32c_legitimize_reload_address being generated by
find_reloads_subreg_address. */
if (REGNO (reg) == FB_REGNO && offs == -BIG_FB_ADJ)
return 1;
}
return 0;
}
......@@ -1942,8 +1955,6 @@ m32c_reg_ok_for_base_p (rtx x, int strict)
frame, so the third case seems best. Note that we subtract the
zero, but detect that in the addhi3 pattern. */
#define BIG_FB_ADJ 0
/* Implements LEGITIMIZE_ADDRESS. The only address we really have to
worry about is frame base offsets, as $fb has a limited
displacement range. We deal with this by attempting to reload $fb
......
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