h8300.c (compute_mov_length): Adjust for the new optimization.

* config/h8300/h8300.c (compute_mov_length): Adjust for the
	new optimization.
	* config/h8300/h8300.md (*movsi_h8300): Optimize the load of
	an SImode constant whose upper and lower are the same.

From-SVN: r68475
This commit is contained in:
Kazu Hirata 2003-06-25 11:54:44 +00:00 committed by Kazu Hirata
parent 7099616c53
commit f5139cc523
3 changed files with 18 additions and 2 deletions

View File

@ -1,3 +1,10 @@
2003-06-25 Kazu Hirata <kazu@cs.umass.edu>
* config/h8300/h8300.c (compute_mov_length): Adjust for the
new optimization.
* config/h8300/h8300.md (*movsi_h8300): Optimize the load of
an SImode constant whose upper and lower are the same.
Wed Jun 25 11:31:59 CEST 2003 Jan Hubicka <jh@suse.cz>
* varasm.c (assemble_name): Mark needed variables even when

View File

@ -1876,6 +1876,10 @@ compute_mov_length (rtx *operands)
if ((INTVAL (src) & 0xffff) == 0)
return 6;
if ((INTVAL (src) & 0xffff)
== ((INTVAL (src) >> 16) & 0xffff))
return 6;
}
return 8;
}

View File

@ -396,14 +396,19 @@
}
else
{
/* See if either half is zero. If so, use sub.w to clear
that half. */
if (GET_CODE (operands[1]) == CONST_INT)
{
/* If either half is zero, use sub.w to clear that
half. */
if ((INTVAL (operands[1]) & 0xffff) == 0)
return \"mov.w %e1,%e0\;sub.w %f0,%f0\";
if (((INTVAL (operands[1]) >> 16) & 0xffff) == 0)
return \"sub.w %e0,%e0\;mov.w %f1,%f0\";
/* If the upper half and the lower half are the same,
copy one half to the other. */
if ((INTVAL (operands[1]) & 0xffff)
== ((INTVAL (operands[1]) >> 16) & 0xffff))
return \"mov.w\\t%e1,%e0\;mov.w\\t%e0,%f0\";
}
return \"mov.w %e1,%e0\;mov.w %f1,%f0\";
}