aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKazu Hirata <kazu@hxi.com>2001-11-12 15:09:04 +0000
committerKazu Hirata <kazu@gcc.gnu.org>2001-11-12 15:09:04 +0000
commit96eaf358c8c5ec4054d076aa7ec766eda6888499 (patch)
tree01ab7867088f718808035b1326b007e48e76e93d
parente9716dc5b3c0cb3e645d939de11130cb67acb3dc (diff)
downloadgcc-96eaf358c8c5ec4054d076aa7ec766eda6888499.zip
gcc-96eaf358c8c5ec4054d076aa7ec766eda6888499.tar.gz
gcc-96eaf358c8c5ec4054d076aa7ec766eda6888499.tar.bz2
* config/h8300/h8300.c (get_shift_alg): Remove redundant code.
From-SVN: r46947
-rw-r--r--gcc/ChangeLog4
-rw-r--r--gcc/config/h8300/h8300.c129
2 files changed, 59 insertions, 74 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b219b21..f904c27 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2001-11-12 Kazu Hirata <kazu@hxi.com>
+
+ * config/h8300/h8300.c (get_shift_alg): Remove redundant code.
+
2001-11-12 Jakub Jelinek <jakub@redhat.com>
* dbxout.c (dbxout_symbol_location): Avoid emitting invalid register
diff --git a/gcc/config/h8300/h8300.c b/gcc/config/h8300/h8300.c
index 5dda782..e27b572 100644
--- a/gcc/config/h8300/h8300.c
+++ b/gcc/config/h8300/h8300.c
@@ -2347,34 +2347,67 @@ get_shift_alg (shift_type, shift_mode, count, info)
else
cpu = 2;
- /* In case we end up with SHIFT_SPECIAL, initialize REMAINDER to 0. */
- info->remainder = 0;
-
- /* Assume either SHIFT_LOOP or SHIFT_INLINE.
- It is up to the caller to know that looping clobbers cc. */
- info->shift1 = shift_one[cpu_type][shift_type][shift_mode].assembler;
- info->shift2 = shift_two[shift_type][shift_mode].assembler;
- info->cc_valid_p = shift_one[cpu_type][shift_type][shift_mode].cc_valid;
-
- /* Now look for cases we want to optimize. */
+ /* Find the shift algorithm. */
switch (shift_mode)
{
case QIshift:
if (GET_MODE_BITSIZE (QImode) <= count)
- goto return_shift_loop;
+ info->alg = SHIFT_LOOP;
+ else
+ info->alg = shift_alg_qi[cpu][shift_type][count];
+ break;
- switch (shift_alg_qi[cpu][shift_type][count])
- {
- case SHIFT_INLINE:
- goto return_shift_inline;
- case SHIFT_LOOP:
- goto return_shift_loop;
- case SHIFT_ROT_AND:
- goto return_shift_rot_and;
- case SHIFT_SPECIAL:
- ;
- }
+ case HIshift:
+ if (GET_MODE_BITSIZE (HImode) <= count)
+ info->alg = SHIFT_LOOP;
+ else
+ info->alg = shift_alg_hi[cpu][shift_type][count];
+ break;
+
+ case SIshift:
+ if (GET_MODE_BITSIZE (SImode) <= count)
+ info->alg = SHIFT_LOOP;
+ else
+ info->alg = shift_alg_si[cpu][shift_type][count];
+ break;
+
+ default:
+ abort ();
+ }
+
+ /* Fill in INFO. Return unless we have SHIFT_SPECIAL. */
+ switch (info->alg)
+ {
+ case SHIFT_INLINE:
+ info->remainder = count;
+ /* Fall through. */
+
+ case SHIFT_LOOP:
+ /* It is up to the caller to know that looping clobbers cc. */
+ info->shift1 = shift_one[cpu_type][shift_type][shift_mode].assembler;
+ info->shift2 = shift_two[shift_type][shift_mode].assembler;
+ info->cc_valid_p = shift_one[cpu_type][shift_type][shift_mode].cc_valid;
+ goto end;
+
+ case SHIFT_ROT_AND:
+ info->shift1 = rotate_one[cpu_type][shift_type][shift_mode];
+ info->shift2 = rotate_two[shift_type][shift_mode];
+ info->cc_valid_p = 0;
+ goto end;
+
+ case SHIFT_SPECIAL:
+ /* REMAINDER is 0 for most cases, so initialize it to 0. */
+ info->remainder = 0;
+ info->shift1 = shift_one[cpu_type][shift_type][shift_mode].assembler;
+ info->shift2 = shift_two[shift_type][shift_mode].assembler;
+ info->cc_valid_p = 0;
+ break;
+ }
+ /* Here we only deal with SHIFT_SPECIAL. */
+ switch (shift_mode)
+ {
+ case QIshift:
/* For ASHIFTRT by 7 bits, the sign bit is simply replicated
through the entire value. */
if (shift_type == SHIFT_ASHIFTRT && count == 7)
@@ -2385,21 +2418,6 @@ get_shift_alg (shift_type, shift_mode, count, info)
abort ();
case HIshift:
- if (GET_MODE_BITSIZE (HImode) <= count)
- goto return_shift_loop;
-
- switch (shift_alg_hi[cpu][shift_type][count])
- {
- case SHIFT_INLINE:
- goto return_shift_inline;
- case SHIFT_LOOP:
- goto return_shift_loop;
- case SHIFT_ROT_AND:
- goto return_shift_rot_and;
- case SHIFT_SPECIAL:
- ;
- }
-
if (count == 7)
{
if (shift_type == SHIFT_ASHIFT && TARGET_H8300)
@@ -2466,22 +2484,6 @@ get_shift_alg (shift_type, shift_mode, count, info)
abort ();
case SIshift:
- if (GET_MODE_BITSIZE (SImode) <= count)
- goto return_shift_loop;
-
- info->alg = shift_alg_si[cpu][shift_type][count];
- switch (info->alg)
- {
- case SHIFT_INLINE:
- goto return_shift_inline;
- case SHIFT_LOOP:
- goto return_shift_loop;
- case SHIFT_ROT_AND:
- goto return_shift_rot_and;
- case SHIFT_SPECIAL:
- ;
- }
-
if (count == 8 && TARGET_H8300)
{
switch (shift_type)
@@ -2583,28 +2585,7 @@ get_shift_alg (shift_type, shift_mode, count, info)
abort ();
}
- return_shift_loop:
- /* No fancy method is available. Just loop. */
- info->alg = SHIFT_LOOP;
- goto end;
-
- return_shift_inline:
- info->remainder = count;
- info->alg = SHIFT_INLINE;
- goto end;
-
return_shift_special:
- info->cc_valid_p = 0;
- info->alg = SHIFT_SPECIAL;
- goto end;
-
- return_shift_rot_and:
- info->shift1 = rotate_one[cpu_type][shift_type][shift_mode];
- info->shift2 = rotate_two[shift_type][shift_mode];
- info->cc_valid_p = 0;
- info->alg = SHIFT_ROT_AND;
- goto end;
-
end:
if (!TARGET_H8300S)
info->shift2 = NULL;