aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorKazu Hirata <kazu@hxi.com>2001-11-13 21:00:28 +0000
committerKazu Hirata <kazu@gcc.gnu.org>2001-11-13 21:00:28 +0000
commit4a4ae922546d1108be6301a155a86627911d4da4 (patch)
treebc2ccc5aea48db839b3e508eb855f59eecb2bfb4 /gcc
parent819138ac7b6e38becc5e133524c78aa46b1d5b92 (diff)
downloadgcc-4a4ae922546d1108be6301a155a86627911d4da4.zip
gcc-4a4ae922546d1108be6301a155a86627911d4da4.tar.gz
gcc-4a4ae922546d1108be6301a155a86627911d4da4.tar.bz2
h8300.c (shift_alg_si): Use special code for 25-bit shifts on H8/S.
* config/h8300/h8300.c (shift_alg_si): Use special code for 25-bit shifts on H8/S. (get_shift_alg): Generate special code for 25-bit shifts on H8/S. From-SVN: r46991
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog7
-rw-r--r--gcc/config/h8300/h8300.c17
2 files changed, 20 insertions, 4 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index e3c672f..b7acb2f 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,10 @@
+2001-11-13 Kazu Hirata <kazu@hxi.com>
+
+ * config/h8300/h8300.c (shift_alg_si): Use special code for
+ 25-bit shifts on H8/S.
+ (get_shift_alg): Generate special code for 25-bit shifts on
+ H8/S.
+
2001-11-13 Jakub Jelinek <jakub@redhat.com>
* emit-rtl.c (adjust_address_1): Add ADJUST argument.
diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c
index e31ddfa..f978392 100644
--- a/gcc/config/h8300/h8300.c
+++ b/gcc/config/h8300/h8300.c
@@ -2273,15 +2273,15 @@ static const enum shift_alg shift_alg_si[3][3][32] = {
{ INL, INL, INL, INL, INL, INL, INL, INL,
INL, INL, INL, LOP, LOP, LOP, LOP, SPC,
SPC, SPC, SPC, SPC, SPC, SPC, LOP, LOP,
- SPC, LOP, LOP, LOP, ROT, ROT, ROT, SPC }, /* SHIFT_ASHIFT */
+ SPC, SPC, LOP, LOP, ROT, ROT, ROT, SPC }, /* SHIFT_ASHIFT */
{ INL, INL, INL, INL, INL, INL, INL, INL,
INL, INL, INL, LOP, LOP, LOP, LOP, SPC,
SPC, SPC, SPC, SPC, SPC, SPC, LOP, LOP,
- SPC, LOP, LOP, LOP, ROT, ROT, ROT, SPC }, /* SHIFT_LSHIFTRT */
+ SPC, SPC, LOP, LOP, ROT, ROT, ROT, SPC }, /* SHIFT_LSHIFTRT */
{ INL, INL, INL, INL, INL, INL, INL, INL,
INL, INL, INL, LOP, LOP, LOP, LOP, LOP,
SPC, SPC, SPC, SPC, SPC, SPC, LOP, LOP,
- SPC, LOP, LOP, LOP, LOP, LOP, LOP, SPC }, /* SHIFT_ASHIFTRT */
+ SPC, SPC, LOP, LOP, LOP, LOP, LOP, SPC }, /* SHIFT_ASHIFTRT */
}
};
@@ -2554,18 +2554,27 @@ get_shift_alg (shift_type, shift_mode, count, info)
goto end;
}
}
- else if (count == 24 && !TARGET_H8300)
+ else if ((TARGET_H8300H && count == 24)
+ || (TARGET_H8300S && 24 <= count && count <= 25))
{
+ info->remainder = count - 24;
+
switch (shift_type)
{
case SHIFT_ASHIFT:
info->special = "mov.b\t%s0,%t0\n\tsub.b\t%s0,%s0\n\tmov.w\t%f0,%e0\n\tsub.w\t%f0,%f0";
+ info->shift1 = "shll.l\t%S0";
+ info->shift2 = "shll.l\t#2,%S0";
goto end;
case SHIFT_LSHIFTRT:
info->special = "mov.w\t%e0,%f0\n\tmov.b\t%t0,%s0\n\textu.w\t%f0\n\textu.l\t%S0";
+ info->shift1 = "shlr.l\t%S0";
+ info->shift2 = "shlr.l\t#2,%S0";
goto end;
case SHIFT_ASHIFTRT:
info->special = "mov.w\t%e0,%f0\n\tmov.b\t%t0,%s0\n\texts.w\t%f0\n\texts.l\t%S0";
+ info->shift1 = "shar.l\t%S0";
+ info->shift2 = "shar.l\t#2,%S0";
goto end;
}
}