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> 2007-07-16 Rafael Avila de Espindola <espindola@google.com>
* c-decl.c (merge_decls): Keep DECL_SOURCE_LOCATION and * c-decl.c (merge_decls): Keep DECL_SOURCE_LOCATION and
......
...@@ -1778,6 +1778,8 @@ m32c_init_libfuncs (void) ...@@ -1778,6 +1778,8 @@ m32c_init_libfuncs (void)
/* Addressing Modes */ /* Addressing Modes */
#define BIG_FB_ADJ 0
/* Used by GO_IF_LEGITIMATE_ADDRESS. The r8c/m32c family supports a /* Used by GO_IF_LEGITIMATE_ADDRESS. The r8c/m32c family supports a
wide range of non-orthogonal addressing modes, including the wide range of non-orthogonal addressing modes, including the
ability to double-indirect on *some* of them. Not all insns 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) ...@@ -1895,6 +1897,17 @@ m32c_legitimate_address_p (enum machine_mode mode, rtx x, int strict)
return 0; 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; return 0;
} }
...@@ -1942,8 +1955,6 @@ m32c_reg_ok_for_base_p (rtx x, int strict) ...@@ -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 frame, so the third case seems best. Note that we subtract the
zero, but detect that in the addhi3 pattern. */ zero, but detect that in the addhi3 pattern. */
#define BIG_FB_ADJ 0
/* Implements LEGITIMIZE_ADDRESS. The only address we really have to /* Implements LEGITIMIZE_ADDRESS. The only address we really have to
worry about is frame base offsets, as $fb has a limited worry about is frame base offsets, as $fb has a limited
displacement range. We deal with this by attempting to reload $fb 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