Commit 96f38a34 by Richard Sandiford Committed by Richard Sandiford

re PR target/33635 (Bootstrap broken on mips-sgi-irix6.5)

gcc/
	PR target/33635
	* config/mips/mips.c (mips_register_move_cost): Rewrite to use
	subset checks.  Make the cost of FPR -> FPR moves depend on
	mips_mode_ok_for_mov_fmt_p.

gcc/testsuite/
	PR target/33635
	* gcc.target/mips/pr33635-1.c: New test.

From-SVN: r129031
parent afd82ef5
2007-10-05 Richard Sandiford <rsandifo@nildram.co.uk>
PR target/33635
* config/mips/mips.c (mips_register_move_cost): Rewrite to use
subset checks. Make the cost of FPR -> FPR moves depend on
mips_mode_ok_for_mov_fmt_p.
2007-10-04 Doug Kwan <dougkwan@google.com> 2007-10-04 Doug Kwan <dougkwan@google.com>
* gthr-posix.h (__gthread_cond_broadcast, __gthread_cond_wait, * gthr-posix.h (__gthread_cond_broadcast, __gthread_cond_wait,
...@@ -10969,69 +10969,54 @@ mips_init_libfuncs (void) ...@@ -10969,69 +10969,54 @@ mips_init_libfuncs (void)
we need to use. This gets pretty messy, but it is feasible. */ we need to use. This gets pretty messy, but it is feasible. */
int int
mips_register_move_cost (enum machine_mode mode ATTRIBUTE_UNUSED, mips_register_move_cost (enum machine_mode mode,
enum reg_class to, enum reg_class from) enum reg_class to, enum reg_class from)
{ {
if (from == M16_REGS && reg_class_subset_p (to, GENERAL_REGS)) if (TARGET_MIPS16)
return 2;
else if (from == M16_NA_REGS && reg_class_subset_p (to, GENERAL_REGS))
return 2;
else if (reg_class_subset_p (from, GENERAL_REGS))
{ {
if (to == M16_REGS) if (reg_class_subset_p (from, GENERAL_REGS)
return 2; && reg_class_subset_p (to, GENERAL_REGS))
else if (to == M16_NA_REGS)
return 2;
else if (reg_class_subset_p (to, GENERAL_REGS))
{ {
if (TARGET_MIPS16) if (reg_class_subset_p (from, M16_REGS)
return 4; || reg_class_subset_p (to, M16_REGS))
else
return 2; return 2;
} /* Two MOVEs. */
else if (to == FP_REGS) return 4;
return 4;
else if (reg_class_subset_p (to, ACC_REGS))
{
if (TARGET_MIPS16)
return 12;
else
return 6;
}
else if (reg_class_subset_p (to, ALL_COP_REGS))
{
return 5;
} }
} }
else if (from == FP_REGS) else if (reg_class_subset_p (from, GENERAL_REGS))
{ {
if (reg_class_subset_p (to, GENERAL_REGS)) if (reg_class_subset_p (to, GENERAL_REGS))
return 4;
else if (to == FP_REGS)
return 2; return 2;
else if (to == ST_REGS) if (reg_class_subset_p (to, FP_REGS))
return 8; return 4;
if (reg_class_subset_p (to, ALL_COP_AND_GR_REGS))
return 5;
if (reg_class_subset_p (to, ACC_REGS))
return 6;
} }
else if (reg_class_subset_p (from, ACC_REGS)) else if (reg_class_subset_p (to, GENERAL_REGS))
{ {
if (reg_class_subset_p (to, GENERAL_REGS)) if (reg_class_subset_p (from, FP_REGS))
{ return 4;
if (TARGET_MIPS16) if (reg_class_subset_p (from, ST_REGS))
return 12; /* LUI followed by MOVF. */
else return 4;
return 6; if (reg_class_subset_p (from, ALL_COP_AND_GR_REGS))
} return 5;
if (reg_class_subset_p (from, ACC_REGS))
return 6;
} }
else if (from == ST_REGS && reg_class_subset_p (to, GENERAL_REGS)) else if (reg_class_subset_p (from, FP_REGS))
return 4;
else if (reg_class_subset_p (from, ALL_COP_REGS))
{ {
return 5; if (reg_class_subset_p (to, FP_REGS)
&& mips_mode_ok_for_mov_fmt_p (mode))
return 4;
if (reg_class_subset_p (to, ST_REGS))
/* An expensive sequence. */
return 8;
} }
/* Fall through.
??? What cases are these? Shouldn't we return 2 here? */
return 12; return 12;
} }
......
2007-10-05 Richard Sandiford <rsandifo@nildram.co.uk>
PR target/33635
* gcc.target/mips/pr33635-1.c: New test.
2007-10-04 Jerry DeLisle <jvdelisle@gcc.gnu.org> 2007-10-04 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/33253 PR libfortran/33253
/* { dg-mips-options "-mabi=64 -O2" } */
long double __powitf2 (long double x, int m)
{
long double y = x;
while (m >>= 1)
{
x = x * x;
if (m % 2)
y = y * x;
}
return y;
}
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