diff options
author | Kazu Hirata <kazu@hxi.com> | 2001-08-29 16:01:59 +0000 |
---|---|---|
committer | Kazu Hirata <kazu@gcc.gnu.org> | 2001-08-29 16:01:59 +0000 |
commit | b3a68dbae82fa22528936f7eb25c7acab1eaa6d0 (patch) | |
tree | f48eccd5737c3ab64c833c6f3e9bab68f7f27887 /gcc/config | |
parent | 45a4bc1dc5a87d97635627568444a71525e711f1 (diff) | |
download | gcc-b3a68dbae82fa22528936f7eb25c7acab1eaa6d0.zip gcc-b3a68dbae82fa22528936f7eb25c7acab1eaa6d0.tar.gz gcc-b3a68dbae82fa22528936f7eb25c7acab1eaa6d0.tar.bz2 |
h8300.md (movsi_h8300hs): Optimize loading of several special constants.
* h8300.md (movsi_h8300hs): Optimize loading of several
special constants.
From-SVN: r45261
Diffstat (limited to 'gcc/config')
-rw-r--r-- | gcc/config/h8300/h8300.md | 29 |
1 files changed, 24 insertions, 5 deletions
diff --git a/gcc/config/h8300/h8300.md b/gcc/config/h8300/h8300.md index c93a6eb..216524e 100644 --- a/gcc/config/h8300/h8300.md +++ b/gcc/config/h8300/h8300.md @@ -436,12 +436,31 @@ return \"sub.l\\t%S0,%S0\;add.b\\t%1,%x0\"; } - /* Now look for small negative numbers. We can subtract them - from zero to get the desired constant. */ - if (val == -4 || val == -2 || val == -1) + /* Look for constants that can be obtained by subs, inc, and + dec to 0. */ + switch (val) { - operands[1] = GEN_INT (-INTVAL (operands[1])); - return \"sub.l\\t%S0,%S0\;subs\\t%1,%S0\"; + case 0xffffffff: + return \"sub.l\\t%S0,%S0\;subs\\t#1,%S0\"; + case 0xfffffffe: + return \"sub.l\\t%S0,%S0\;subs\\t#2,%S0\"; + case 0xfffffffc: + return \"sub.l\\t%S0,%S0\;subs\\t#4,%S0\"; + + case 0x0000ffff: + return \"sub.l\\t%S0,%S0\;dec.w\\t#1,%f0\"; + case 0x0000fffe: + return \"sub.l\\t%S0,%S0\;dec.w\\t#2,%f0\"; + + case 0xffff0000: + return \"sub.l\\t%S0,%S0\;dec.w\\t#1,%e0\"; + case 0xfffe0000: + return \"sub.l\\t%S0,%S0\;dec.w\\t#2,%e0\"; + + case 0x00010000: + return \"sub.l\\t%S0,%S0\;inc.w\\t#1,%e0\"; + case 0x00020000: + return \"sub.l\\t%S0,%S0\;inc.w\\t#2,%e0\"; } } } |