Commit cfedf91b by Kazu Hirata Committed by Kazu Hirata

h8300.c (output_plussi): Support H8/300.

	* config/h8300/h8300.c (output_plussi): Support H8/300.
	(compute_plussi_length): Likewise.
	(compute_plussi_cc): Likewise.
	* config/h8300/h8300.md (addsi_h8300): Use output_plussi to
	output assembly instructions.

From-SVN: r61546
parent 1f5b3282
2003-01-21 Kazu Hirata <kazu@cs.umass.edu>
* config/h8300/h8300.c (output_plussi): Support H8/300.
(compute_plussi_length): Likewise.
(compute_plussi_cc): Likewise.
* config/h8300/h8300.md (addsi_h8300): Use output_plussi to
output assembly instructions.
2003-01-21 Kaveh R. Ghazi <ghazi@caip.rutgers.edu> 2003-01-21 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* calls.c (fix_unsafe_tree): Prototype. * calls.c (fix_unsafe_tree): Prototype.
......
...@@ -1900,8 +1900,22 @@ output_plussi (operands) ...@@ -1900,8 +1900,22 @@ output_plussi (operands)
if (TARGET_H8300) if (TARGET_H8300)
{ {
/* Currently we do not support H8/300 here yet. */ if (GET_CODE (operands[2]) == REG)
abort (); return "add.w\t%f2,%f0\n\taddx\t%y2,%y0\n\taddx\t%z2,%z0";
if (GET_CODE (operands[2]) == CONST_INT)
{
HOST_WIDE_INT n = INTVAL (operands[2]);
if ((n & 0xffffff) == 0)
return "add\t%z2,%z0";
if ((n & 0xffff) == 0)
return "add\t%y2,%y0\n\taddx\t%z2,%z0";
if ((n & 0xff) == 0)
return "add\t%x2,%x0\n\taddx\t%y2,%y0\n\taddx\t%z2,%z0";
}
return "add\t%w2,%w0\n\taddx\t%x2,%x0\n\taddx\t%y2,%y0\n\taddx\t%z2,%z0";
} }
else else
{ {
...@@ -1960,8 +1974,22 @@ compute_plussi_length (operands) ...@@ -1960,8 +1974,22 @@ compute_plussi_length (operands)
if (TARGET_H8300) if (TARGET_H8300)
{ {
/* Currently we do not support H8/300 here yet. */ if (GET_CODE (operands[2]) == REG)
abort (); return 6;
if (GET_CODE (operands[2]) == CONST_INT)
{
HOST_WIDE_INT n = INTVAL (operands[2]);
if ((n & 0xffffff) == 0)
return 2;
if ((n & 0xffff) == 0)
return 4;
if ((n & 0xff) == 0)
return 6;
}
return 8;
} }
else else
{ {
...@@ -2015,8 +2043,7 @@ compute_plussi_cc (operands) ...@@ -2015,8 +2043,7 @@ compute_plussi_cc (operands)
if (TARGET_H8300) if (TARGET_H8300)
{ {
/* Currently we do not support H8/300 here yet. */ return CC_CLOBBER;
abort ();
} }
else else
{ {
......
...@@ -859,11 +859,11 @@ ...@@ -859,11 +859,11 @@
(plus:SI (match_operand:SI 1 "register_operand" "%0,0") (plus:SI (match_operand:SI 1 "register_operand" "%0,0")
(match_operand:SI 2 "nonmemory_operand" "n,r")))] (match_operand:SI 2 "nonmemory_operand" "n,r")))]
"TARGET_H8300" "TARGET_H8300"
"@ "* return output_plussi (operands);"
add %w2,%w0\;addx %x2,%x0\;addx %y2,%y0\;addx %z2,%z0 [(set (attr "length")
add.w %f2,%f0\;addx %y2,%y0\;addx %z2,%z0" (symbol_ref "compute_plussi_length (operands)"))
[(set_attr "length" "8,6") (set (attr "cc")
(set_attr "cc" "clobber,clobber")]) (symbol_ref "compute_plussi_cc (operands)"))])
(define_insn "addsi_h8300h" (define_insn "addsi_h8300h"
[(set (match_operand:SI 0 "register_operand" "=r,r") [(set (match_operand:SI 0 "register_operand" "=r,r")
......
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