aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKazu Hirata <kazu@cs.umass.edu>2003-03-03 12:49:38 +0000
committerKazu Hirata <kazu@gcc.gnu.org>2003-03-03 12:49:38 +0000
commit1f7e87909e7d00c3ef6270c2783d765e164e317f (patch)
tree86141f9cc7a4d1c12363edb4b96e80e0c3b59d91
parent2807791e08b7995dc88a27d3199fcff042ef39ac (diff)
downloadgcc-1f7e87909e7d00c3ef6270c2783d765e164e317f.zip
gcc-1f7e87909e7d00c3ef6270c2783d765e164e317f.tar.gz
gcc-1f7e87909e7d00c3ef6270c2783d765e164e317f.tar.bz2
h8300.md (*extzv_8_8): Use shorter code when operands[0] and operands[1] are different.
* config/h8300/h8300.md (*extzv_8_8): Use shorter code when operands[0] and operands[1] are different. From-SVN: r63718
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/h8300/h8300.md9
2 files changed, 14 insertions, 2 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 79429c2..8b81f7e 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,4 +1,9 @@
-2003-03-02 Kazu Hirata <kazu@cs.umass.edu>
+2003-03-03 Kazu Hirata <kazu@cs.umass.edu>
+
+ * config/h8300/h8300.md (*extzv_8_8): Use shorter code when
+ operands[0] and operands[1] are different.
+
+2003-03-03 Kazu Hirata <kazu@cs.umass.edu>
* reload1.c (reload_cse_move2add): Remove variable success.
diff --git a/gcc/config/h8300/h8300.md b/gcc/config/h8300/h8300.md
index 61ae4b6..28cb87e 100644
--- a/gcc/config/h8300/h8300.md
+++ b/gcc/config/h8300/h8300.md
@@ -2630,7 +2630,14 @@
(const_int 8)
(const_int 8)))]
"TARGET_H8300H || TARGET_H8300S"
- "mov.b\\t%x1,%w0\;extu.w\\t%f0\;extu.l\\t%S0"
+ "*
+{
+ if (REG_P (operands[0]) && REG_P (operands[1])
+ && REGNO (operands[0]) != REGNO (operands[1]))
+ return \"sub.l\\t%S0,%S0\;mov.b\\t%x1,%w0\";
+ else
+ return \"mov.b\\t%x1,%w0\;extu.w\\t%f0\;extu.l\\t%S0\";
+}"
[(set_attr "cc" "set_znv")
(set_attr "length" "6")])