This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

[patch] h8300.c & h8300.md: Improve readability.


Hi,

Attached is a patch to improve readbility of config/h8300/h8300.c and
config/h8300/h8300.md.

Thanks,

Kazu Hirata

2000-07-30  Kazu Hirata  <kazu@hxi.com>

	* config/h8300/h8300.c (get_shift_alg): Remove the variable alg.
	(emit_a_shift): Rearrange code to improve readability.

	* config/h8300/h8300.md (movsi_h8300hs): Rearrange code to improve
	readability.

============================================================

Index: h8300.c
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/h8300/h8300.c,v
retrieving revision 1.32
diff -u -r1.32 h8300.c
--- h8300.c	2000/07/28 02:17:25	1.32
+++ h8300.c	2000/07/30 06:04:16
@@ -2085,8 +2085,6 @@
      const char **assembler2_p;
      int *cc_valid_p;
 {
-  /* The default is to loop.  */
-  enum shift_alg alg = SHIFT_LOOP;
   enum shift_mode shift_mode;
 
   /* We don't handle negative shifts or shifts greater than the word size,
@@ -2574,7 +2572,8 @@
       abort ();
     }
 
-  return alg;
+  /* No fancy method is available.  Just loop.  */
+  return SHIFT_LOOP;
 }
 
 /* Emit the assembler code for doing shifts.  */
@@ -2635,6 +2634,14 @@
       /* Get the assembler code to do one shift.  */
       get_shift_alg (cpu_type, shift_type, mode, 1, &assembler,
 		     &assembler2, &cc_valid);
+
+      fprintf (asm_out_file, ".Llt%d:\n", loopend_lab);
+      output_asm_insn (assembler, operands);
+      output_asm_insn ("add	#0xff,%X4", operands);
+      fprintf (asm_out_file, "\tbne	.Llt%d\n", loopend_lab);
+      fprintf (asm_out_file, ".Lle%d:\n", loopend_lab);
+
+      return "";
     }
   else
     {
@@ -2685,6 +2692,7 @@
 			? ((1 << (GET_MODE_BITSIZE (mode) - n)) - 1) << n
 			: (1 << (GET_MODE_BITSIZE (mode) - n)) - 1);
 	    char insn_buf[200];
+
 	    /* Not all possibilities of rotate are supported.  They shouldn't
 	       be generated, but let's watch for 'em.  */
 	    if (assembler == 0)
@@ -2735,44 +2743,40 @@
 	    output_asm_insn (insn_buf, operands);
 	    return "";
 	  }
+
 	case SHIFT_SPECIAL:
 	  output_asm_insn (assembler, operands);
 	  return "";
-	}
 
-      /* A loop to shift by a "large" constant value.
-	 If we have shift-by-2 insns, use them.  */
-      if (assembler2 != NULL)
-	{
-	  fprintf (asm_out_file, "\tmov.b	#%d,%sl\n", n / 2,
-		   names_big[REGNO (operands[4])]);
-	  fprintf (asm_out_file, ".Llt%d:\n", loopend_lab);
-	  output_asm_insn (assembler2, operands);
-	  output_asm_insn ("add	#0xff,%X4", operands);
-	  fprintf (asm_out_file, "\tbne	.Llt%d\n", loopend_lab);
-	  if (n % 2)
-	    output_asm_insn (assembler, operands);
-	  return "";
-	}
-      else
-	{
-	  fprintf (asm_out_file, "\tmov.b	#%d,%sl\n", n,
-		   names_big[REGNO (operands[4])]);
-	  fprintf (asm_out_file, ".Llt%d:\n", loopend_lab);
-	  output_asm_insn (assembler, operands);
-	  output_asm_insn ("add	#0xff,%X4", operands);
-	  fprintf (asm_out_file, "\tbne	.Llt%d\n", loopend_lab);
+	case SHIFT_LOOP:
+	  /* A loop to shift by a "large" constant value.
+	     If we have shift-by-2 insns, use them.  */
+	  if (assembler2 != NULL)
+	    {
+	      fprintf (asm_out_file, "\tmov.b	#%d,%sl\n", n / 2,
+		       names_big[REGNO (operands[4])]);
+	      fprintf (asm_out_file, ".Llt%d:\n", loopend_lab);
+	      output_asm_insn (assembler2, operands);
+	      output_asm_insn ("add	#0xff,%X4", operands);
+	      fprintf (asm_out_file, "\tbne	.Llt%d\n", loopend_lab);
+	      if (n % 2)
+		output_asm_insn (assembler, operands);
+	    }
+	  else
+	    {
+	      fprintf (asm_out_file, "\tmov.b	#%d,%sl\n", n,
+		       names_big[REGNO (operands[4])]);
+	      fprintf (asm_out_file, ".Llt%d:\n", loopend_lab);
+	      output_asm_insn (assembler, operands);
+	      output_asm_insn ("add	#0xff,%X4", operands);
+	      fprintf (asm_out_file, "\tbne	.Llt%d\n", loopend_lab);
+	    }
 	  return "";
+
+	default:
+	  abort ();
 	}
     }
-
-  fprintf (asm_out_file, ".Llt%d:\n", loopend_lab);
-  output_asm_insn (assembler, operands);
-  output_asm_insn ("add	#0xff,%X4", operands);
-  fprintf (asm_out_file, "\tbne	.Llt%d\n", loopend_lab);
-  fprintf (asm_out_file, ".Lle%d:\n", loopend_lab);
-
-  return "";
 }
 
 /* Fix the operands of a gen_xxx so that it could become a bit
Index: h8300.md
===================================================================
RCS file: /cvs/gcc/egcs/gcc/config/h8300/h8300.md,v
retrieving revision 1.12
diff -u -r1.12 h8300.md
--- h8300.md	2000/07/20 21:34:07	1.12
+++ h8300.md	2000/07/30 06:04:18
@@ -411,38 +411,42 @@
        || register_operand (operands[1], SImode))"
   "*
 {
-  if (which_alternative == 0)
-    return \"sub.l	%S0,%S0\";
-  if (which_alternative == 6)
-    return \"clrmac\";
-  if (which_alternative == 7)
-    return \"clrmac\;ldmac %1,macl\";
-  if (which_alternative == 8)
-    return \"stmac	macl,%0\";
-  if (GET_CODE (operands[1]) == CONST_INT)
+  switch (which_alternative)
     {
-      int val = INTVAL (operands[1]);
-
-      /* Look for constants which can be made by adding an 8-bit
-	 number to zero in one of the two low bytes.  */
-      if (val == (val & 0xff))
+    case 0:
+      return \"sub.l	%S0,%S0\";
+    case 6:
+      return \"clrmac\";
+    case 7:
+      return \"clrmac\;ldmac %1,macl\";
+    case 8:
+      return \"stmac	macl,%0\";
+    default:
+      if (GET_CODE (operands[1]) == CONST_INT)
 	{
-	  operands[1] = GEN_INT ((char)val & 0xff);
-	  return \"sub.l %S0,%S0\;add.b %1,%w0\";
-	}
-     
-      if (val == (val & 0xff00))
-	{
-	  operands[1] = GEN_INT ((char)(val >> 8) & 0xff);
-	  return \"sub.l %S0,%S0\;add.b %1,%x0\";
-	}
+	  int val = INTVAL (operands[1]);
 
-      /* Now look for small negative numbers.  We can subtract them
-	 from zero to get the desired constant.  */
-      if (val == -4 || val == -2 || val == -1)
-	{
-	  operands[1] = GEN_INT (-INTVAL (operands[1]));
-	  return \"sub.l %S0,%S0\;subs %1,%S0\";
+	  /* Look for constants which can be made by adding an 8-bit
+	     number to zero in one of the two low bytes.  */
+	  if (val == (val & 0xff))
+	    {
+	      operands[1] = GEN_INT ((char)val & 0xff);
+	      return \"sub.l %S0,%S0\;add.b %1,%w0\";
+	    }
+     
+	  if (val == (val & 0xff00))
+	    {
+	      operands[1] = GEN_INT ((char)(val >> 8) & 0xff);
+	      return \"sub.l %S0,%S0\;add.b %1,%x0\";
+	    }
+
+	  /* Now look for small negative numbers.  We can subtract them
+	     from zero to get the desired constant.  */
+	  if (val == -4 || val == -2 || val == -1)
+	    {
+	      operands[1] = GEN_INT (-INTVAL (operands[1]));
+	      return \"sub.l %S0,%S0\;subs %1,%S0\";
+	    }
 	}
     }
    return \"mov.l	%S1,%S0\";
============================================================


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]