OSDN Git Service

* config/h8300/h8300.c (get_shift_alg): Remove redundant code.
authorkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 12 Nov 2001 15:09:04 +0000 (15:09 +0000)
committerkazu <kazu@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 12 Nov 2001 15:09:04 +0000 (15:09 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@46947 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/config/h8300/h8300.c

index b219b21..f904c27 100644 (file)
@@ -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
index 5dda782..e27b572 100644 (file)
@@ -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;