Commit 472f2723 by Kazu Hirata Committed by Kazu Hirata

h8300.c (output_logical_op): Optimize or.l when ORing with 0xffff??00 with the…

h8300.c (output_logical_op): Optimize or.l when ORing with 0xffff??00 with the highest bit of the ?? part set.

	* config/h8300/h8300.c (output_logical_op): Optimize or.l when
	ORing with 0xffff??00 with the highest bit of the ?? part set.
	(compute_logical_op_length): Update.
	(compute_logical_op_cc): Likewise.

From-SVN: r63131
parent 6d9cc15b
2003-02-19 Kazu Hirata <kazu@cs.umass.edu>
* config/h8300/h8300.c (output_logical_op): Optimize or.l when
ORing with 0xffff??00 with the highest bit of the ?? part set.
(compute_logical_op_length): Update.
(compute_logical_op_cc): Likewise.
2003-02-19 Josef Zlomek <zlomekj@suse.cz> 2003-02-19 Josef Zlomek <zlomekj@suse.cz>
* bb-reorder.c (find_traces_1_round): Fixed condition for small * bb-reorder.c (find_traces_1_round): Fixed condition for small
......
...@@ -2206,7 +2206,9 @@ output_logical_op (mode, operands) ...@@ -2206,7 +2206,9 @@ output_logical_op (mode, operands)
using multiple insns. */ using multiple insns. */
if ((TARGET_H8300H || TARGET_H8300S) if ((TARGET_H8300H || TARGET_H8300S)
&& w0 != 0 && w1 != 0 && w0 != 0 && w1 != 0
&& !(lower_half_easy_p && upper_half_easy_p)) && !(lower_half_easy_p && upper_half_easy_p)
&& !(code == IOR && w1 == 0xffff
&& (w0 & 0x8000) != 0 && lower_half_easy_p))
{ {
sprintf (insn_buf, "%s.l\t%%S2,%%S0", opname); sprintf (insn_buf, "%s.l\t%%S2,%%S0", opname);
output_asm_insn (insn_buf, operands); output_asm_insn (insn_buf, operands);
...@@ -2251,6 +2253,13 @@ output_logical_op (mode, operands) ...@@ -2251,6 +2253,13 @@ output_logical_op (mode, operands)
? "sub.w\t%e0,%e0" : "not.w\t%e0", ? "sub.w\t%e0,%e0" : "not.w\t%e0",
operands); operands);
else if ((TARGET_H8300H || TARGET_H8300S) else if ((TARGET_H8300H || TARGET_H8300S)
&& code == IOR
&& w1 == 0xffff
&& (w0 & 0x8000) != 0)
{
output_asm_insn ("exts.l\t%S0", operands);
}
else if ((TARGET_H8300H || TARGET_H8300S)
&& code == AND && code == AND
&& w1 == 0xff00) && w1 == 0xff00)
{ {
...@@ -2354,7 +2363,9 @@ compute_logical_op_length (mode, operands) ...@@ -2354,7 +2363,9 @@ compute_logical_op_length (mode, operands)
using multiple insns. */ using multiple insns. */
if ((TARGET_H8300H || TARGET_H8300S) if ((TARGET_H8300H || TARGET_H8300S)
&& w0 != 0 && w1 != 0 && w0 != 0 && w1 != 0
&& !(lower_half_easy_p && upper_half_easy_p)) && !(lower_half_easy_p && upper_half_easy_p)
&& !(code == IOR && w1 == 0xffff
&& (w0 & 0x8000) != 0 && lower_half_easy_p))
{ {
if (REG_P (operands[2])) if (REG_P (operands[2]))
length += 4; length += 4;
...@@ -2395,6 +2406,13 @@ compute_logical_op_length (mode, operands) ...@@ -2395,6 +2406,13 @@ compute_logical_op_length (mode, operands)
length += 2; length += 2;
} }
else if ((TARGET_H8300H || TARGET_H8300S) else if ((TARGET_H8300H || TARGET_H8300S)
&& code == IOR
&& w1 == 0xffff
&& (w0 & 0x8000) != 0)
{
length += 2;
}
else if ((TARGET_H8300H || TARGET_H8300S)
&& code == AND && code == AND
&& w1 == 0xff00) && w1 == 0xff00)
{ {
...@@ -2475,10 +2493,22 @@ compute_logical_op_cc (mode, operands) ...@@ -2475,10 +2493,22 @@ compute_logical_op_cc (mode, operands)
using multiple insns. */ using multiple insns. */
if ((TARGET_H8300H || TARGET_H8300S) if ((TARGET_H8300H || TARGET_H8300S)
&& w0 != 0 && w1 != 0 && w0 != 0 && w1 != 0
&& !(lower_half_easy_p && upper_half_easy_p)) && !(lower_half_easy_p && upper_half_easy_p)
&& !(code == IOR && w1 == 0xffff
&& (w0 & 0x8000) != 0 && lower_half_easy_p))
{ {
cc = CC_SET_ZNV; cc = CC_SET_ZNV;
} }
else
{
if ((TARGET_H8300H || TARGET_H8300S)
&& code == IOR
&& w1 == 0xffff
&& (w0 & 0x8000) != 0)
{
cc = CC_SET_ZNV;
}
}
break; break;
default: default:
abort (); abort ();
......
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