h8300.c (shift_alg_hi): Various tweaks to improve performance of HImode shifts.
* h8300.c (shift_alg_hi): Various tweaks to improve performance of HImode shifts. (get_shift_alg): Corresponding changes. From-SVN: r56665
This commit is contained in:
parent
4385234278
commit
5e98fba26b
2 changed files with 38 additions and 10 deletions
|
@ -1,3 +1,9 @@
|
|||
2002-08-29 "Dhananjay R. Deshpande" <dhananjayd@kpit.com>
|
||||
|
||||
* h8300.c (shift_alg_hi): Various tweaks to improve performance
|
||||
of HImode shifts.
|
||||
(get_shift_alg): Corresponding changes.
|
||||
|
||||
2002-08-29 John David Anglin <dave@hiauly1.hia.nrc.ca>
|
||||
|
||||
* som.h (ALWAYS_STRIP_DOTDOT): Define to 1.
|
||||
|
|
|
@ -2213,23 +2213,23 @@ static const enum shift_alg shift_alg_hi[3][3][16] = {
|
|||
/* TARGET_H8300 */
|
||||
/* 0 1 2 3 4 5 6 7 */
|
||||
/* 8 9 10 11 12 13 14 15 */
|
||||
{ INL, INL, INL, INL, INL, INL, INL, SPC,
|
||||
SPC, SPC, SPC, SPC, SPC, SPC, SPC, SPC }, /* SHIFT_ASHIFT */
|
||||
{ INL, INL, INL, INL, INL, LOP, LOP, SPC,
|
||||
SPC, SPC, SPC, SPC, SPC, LOP, LOP, SPC }, /* SHIFT_ASHIFT */
|
||||
SPC, SPC, SPC, SPC, SPC, SPC, SPC, SPC }, /* SHIFT_LSHIFTRT */
|
||||
{ INL, INL, INL, INL, INL, LOP, LOP, SPC,
|
||||
SPC, SPC, SPC, SPC, SPC, LOP, LOP, SPC }, /* SHIFT_LSHIFTRT */
|
||||
{ INL, INL, INL, INL, INL, LOP, LOP, SPC,
|
||||
SPC, SPC, SPC, SPC, SPC, LOP, LOP, SPC }, /* SHIFT_ASHIFTRT */
|
||||
SPC, SPC, SPC, SPC, SPC, SPC, SPC, SPC }, /* SHIFT_ASHIFTRT */
|
||||
},
|
||||
{
|
||||
/* TARGET_H8300H */
|
||||
/* 0 1 2 3 4 5 6 7 */
|
||||
/* 8 9 10 11 12 13 14 15 */
|
||||
{ INL, INL, INL, INL, INL, LOP, LOP, SPC,
|
||||
{ INL, INL, INL, INL, INL, INL, INL, SPC,
|
||||
SPC, SPC, SPC, SPC, SPC, ROT, ROT, ROT }, /* SHIFT_ASHIFT */
|
||||
{ INL, INL, INL, INL, INL, LOP, LOP, SPC,
|
||||
{ INL, INL, INL, INL, INL, INL, INL, SPC,
|
||||
SPC, SPC, SPC, SPC, SPC, ROT, ROT, ROT }, /* SHIFT_LSHIFTRT */
|
||||
{ INL, INL, INL, INL, INL, LOP, LOP, SPC,
|
||||
SPC, SPC, SPC, SPC, SPC, LOP, LOP, SPC }, /* SHIFT_ASHIFTRT */
|
||||
{ INL, INL, INL, INL, INL, INL, INL, SPC,
|
||||
SPC, SPC, SPC, SPC, SPC, SPC, SPC, SPC }, /* SHIFT_ASHIFTRT */
|
||||
},
|
||||
{
|
||||
/* TARGET_H8300S */
|
||||
|
@ -2240,7 +2240,7 @@ static const enum shift_alg shift_alg_hi[3][3][16] = {
|
|||
{ INL, INL, INL, INL, INL, INL, INL, INL,
|
||||
SPC, SPC, SPC, SPC, SPC, ROT, ROT, ROT }, /* SHIFT_LSHIFTRT */
|
||||
{ INL, INL, INL, INL, INL, INL, INL, INL,
|
||||
SPC, SPC, SPC, SPC, SPC, LOP, LOP, SPC }, /* SHIFT_ASHIFTRT */
|
||||
SPC, SPC, SPC, SPC, SPC, SPC, SPC, SPC }, /* SHIFT_ASHIFTRT */
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -2458,7 +2458,7 @@ get_shift_alg (shift_type, shift_mode, count, info)
|
|||
goto end;
|
||||
}
|
||||
}
|
||||
else if (8 <= count && count <= 12)
|
||||
else if (8 <= count && count <= 13)
|
||||
{
|
||||
info->remainder = count - 8;
|
||||
|
||||
|
@ -2484,6 +2484,28 @@ get_shift_alg (shift_type, shift_mode, count, info)
|
|||
goto end;
|
||||
}
|
||||
}
|
||||
else if (count == 14)
|
||||
{
|
||||
switch (shift_type)
|
||||
{
|
||||
case SHIFT_ASHIFT:
|
||||
if (TARGET_H8300)
|
||||
info->special = "mov.b\t%s0,%t0\n\trotr.b\t%t0\n\trotr.b\t%t0\n\tand.b\t#0xC0,%t0\n\tsub.b\t%s0,%s0";
|
||||
goto end;
|
||||
case SHIFT_LSHIFTRT:
|
||||
if (TARGET_H8300)
|
||||
info->special = "mov.b\t%t0,%s0\n\trotl.b\t%s0\n\trotl.b\t%s0\n\tand.b\t#3,%s0\n\tsub.b\t%t0,%t0";
|
||||
goto end;
|
||||
case SHIFT_ASHIFTRT:
|
||||
if (TARGET_H8300)
|
||||
info->special = "mov.b\t%t0,%s0\n\tshll.b\t%s0\n\tsubx.b\t%t0,%t0\n\tshll.b\t%s0\n\tmov.b\t%t0,%s0\n\tbst.b\t#0,%s0";
|
||||
else if (TARGET_H8300H)
|
||||
info->special = "shll.b\t%t0\n\tsubx.b\t%s0,%s0\n\tshll.b\t%t0\n\trotxl.b\t%s0\n\texts.w\t%T0";
|
||||
else /* TARGET_H8300S */
|
||||
info->special = "mov.b\t%t0,%s0\n\texts.w\t%T0\n\tshar.w\t#2,%T0\n\tshar.w\t#2,%T0\n\tshar.w\t#2,%T0";
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
else if (count == 15)
|
||||
{
|
||||
switch (shift_type)
|
||||
|
|
Loading…
Add table
Reference in a new issue