Commit 4a4ae922 by Kazu Hirata Committed by Kazu Hirata

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
parent 819138ac
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> 2001-11-13 Jakub Jelinek <jakub@redhat.com>
* emit-rtl.c (adjust_address_1): Add ADJUST argument. * emit-rtl.c (adjust_address_1): Add ADJUST argument.
......
...@@ -2273,15 +2273,15 @@ static const enum shift_alg shift_alg_si[3][3][32] = { ...@@ -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, INL, INL, INL, INL, INL,
INL, INL, INL, LOP, LOP, LOP, LOP, SPC, INL, INL, INL, LOP, LOP, LOP, LOP, SPC,
SPC, SPC, SPC, SPC, SPC, SPC, LOP, LOP, 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, INL, INL, INL, INL, INL,
INL, INL, INL, LOP, LOP, LOP, LOP, SPC, INL, INL, INL, LOP, LOP, LOP, LOP, SPC,
SPC, SPC, SPC, SPC, SPC, SPC, LOP, LOP, 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, INL, INL, INL, INL, INL,
INL, INL, INL, LOP, LOP, LOP, LOP, LOP, INL, INL, INL, LOP, LOP, LOP, LOP, LOP,
SPC, SPC, SPC, SPC, SPC, SPC, 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) ...@@ -2554,18 +2554,27 @@ get_shift_alg (shift_type, shift_mode, count, info)
goto end; 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) switch (shift_type)
{ {
case SHIFT_ASHIFT: 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->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; goto end;
case SHIFT_LSHIFTRT: 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->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; goto end;
case SHIFT_ASHIFTRT: 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->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; goto end;
} }
} }
......
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