Commit e0f19bd0 by Kazu Hirata Committed by Kazu Hirata

h8300.c (shift_alg_qi): Use rotations when doing 6-bit logical shifts on H8/S.

	* config/h8300/h8300.c (shift_alg_qi): Use rotations when
	doing 6-bit logical shifts on H8/S.
	(shift_alg_qi): Use special code for 21-bit shifts on H8/S.
	(get_shift_alg): Generate special code for 21-bit shifts on
	H8/S.

From-SVN: r46961
parent abfc1ef6
2001-11-12 Kazu Hirata <kazu@hxi.com> 2001-11-12 Kazu Hirata <kazu@hxi.com>
* config/h8300/h8300.c (shift_alg_qi): Use rotations when
doing 6-bit logical shifts on H8/S.
(shift_alg_qi): Use special code for 21-bit shifts on H8/S.
(get_shift_alg): Generate special code for 21-bit shifts on
H8/S.
2001-11-12 Kazu Hirata <kazu@hxi.com>
* config/h8300/h8300.c (get_shift_alg): Remove a redundant * config/h8300/h8300.c (get_shift_alg): Remove a redundant
label. label.
......
...@@ -2183,8 +2183,8 @@ static const enum shift_alg shift_alg_qi[3][3][8] = { ...@@ -2183,8 +2183,8 @@ static const enum shift_alg shift_alg_qi[3][3][8] = {
{ {
/* TARGET_H8300S */ /* TARGET_H8300S */
/* 0 1 2 3 4 5 6 7 */ /* 0 1 2 3 4 5 6 7 */
{ INL, INL, INL, INL, INL, INL, INL, ROT }, /* SHIFT_ASHIFT */ { INL, INL, INL, INL, INL, INL, ROT, ROT }, /* SHIFT_ASHIFT */
{ INL, INL, INL, INL, INL, INL, INL, ROT }, /* SHIFT_LSHIFTRT */ { INL, INL, INL, INL, INL, INL, ROT, ROT }, /* SHIFT_LSHIFTRT */
{ INL, INL, INL, INL, INL, INL, INL, SPC } /* SHIFT_ASHIFTRT */ { INL, INL, INL, INL, INL, INL, INL, SPC } /* SHIFT_ASHIFTRT */
} }
}; };
...@@ -2272,15 +2272,15 @@ static const enum shift_alg shift_alg_si[3][3][32] = { ...@@ -2272,15 +2272,15 @@ static const enum shift_alg shift_alg_si[3][3][32] = {
/* 24 25 26 27 28 29 30 31 */ /* 24 25 26 27 28 29 30 31 */
{ 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, LOP, LOP, LOP, SPC, SPC, SPC, SPC, SPC, SPC, LOP, LOP,
SPC, LOP, LOP, LOP, ROT, ROT, ROT, ROT }, /* SHIFT_ASHIFT */ SPC, LOP, LOP, LOP, ROT, ROT, ROT, ROT }, /* 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, LOP, INL, INL, INL, LOP, LOP, LOP, LOP, LOP,
SPC, SPC, SPC, SPC, SPC, LOP, LOP, LOP, SPC, SPC, SPC, SPC, SPC, SPC, LOP, LOP,
SPC, LOP, LOP, LOP, ROT, ROT, ROT, ROT }, /* SHIFT_LSHIFTRT */ SPC, LOP, LOP, LOP, ROT, ROT, ROT, ROT }, /* 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, LOP, LOP, LOP, SPC, SPC, SPC, SPC, SPC, SPC, LOP, LOP,
SPC, LOP, LOP, LOP, LOP, LOP, LOP, SPC }, /* SHIFT_ASHIFTRT */ SPC, LOP, LOP, LOP, LOP, LOP, LOP, SPC }, /* SHIFT_ASHIFTRT */
} }
}; };
...@@ -2516,7 +2516,7 @@ get_shift_alg (shift_type, shift_mode, count, info) ...@@ -2516,7 +2516,7 @@ get_shift_alg (shift_type, shift_mode, count, info)
} }
else if ((TARGET_H8300 && count == 16) else if ((TARGET_H8300 && count == 16)
|| (TARGET_H8300H && 16 <= count && count <= 19) || (TARGET_H8300H && 16 <= count && count <= 19)
|| (TARGET_H8300S && 16 <= count && count <= 20)) || (TARGET_H8300S && 16 <= count && count <= 21))
{ {
info->remainder = count - 16; info->remainder = count - 16;
......
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