h8300.c (h8300_and_costs): New.
authorKazu Hirata <kazu@cs.umass.edu>
Thu, 28 Nov 2002 14:08:34 +0000 (14:08 +0000)
committerKazu Hirata <kazu@gcc.gnu.org>
Thu, 28 Nov 2002 14:08:34 +0000 (14:08 +0000)
* config/h8300/h8300.c (h8300_and_costs): New.
* config/h8300/h8300.h (RTX_COSTS): Use h8300_and_costs.
* config/h8300/h8300-protos.h: Add a prototype for
h8300_and_costs.

From-SVN: r59606

gcc/ChangeLog
gcc/config/h8300/h8300-protos.h
gcc/config/h8300/h8300.c
gcc/config/h8300/h8300.h

index 86e69328bcfe85c70d72ed0273554fee10d35f99..ef37f748f6bc6295d198057bd6af2a8c0e0a53b0 100644 (file)
@@ -1,3 +1,10 @@
+2002-11-28  Kazu Hirata  <kazu@cs.umass.edu>
+
+       * config/h8300/h8300.c (h8300_and_costs): New.
+       * config/h8300/h8300.h (RTX_COSTS): Use h8300_and_costs.
+       * config/h8300/h8300-protos.h: Add a prototype for
+       h8300_and_costs.
+
 2002-11-27  Zack Weinberg  <zack@codesourcery.com>
 
        * config/rs6000/rs6000.c (altivec_init_builtins): Make the
index c9f506ae410c7c69336460e3ca893372164b4a4e..aac56220393ece3b97b180101d71503eab412744 100644 (file)
@@ -32,6 +32,7 @@ extern const char *emit_a_rotate PARAMS ((enum rtx_code, rtx *));
 extern const char *output_simode_bld PARAMS ((int, rtx[]));
 extern void print_operand_address PARAMS ((FILE *, rtx));
 extern int const_costs PARAMS ((rtx, enum rtx_code, enum rtx_code));
+extern int h8300_and_costs PARAMS ((rtx));
 extern int h8300_shift_costs PARAMS ((rtx));
 extern void print_operand PARAMS ((FILE *, rtx, int));
 extern void final_prescan_insn PARAMS ((rtx, rtx *, int));
index 93807a09a06b9b14901ca4a681eb490d123596ca..66ee6fa475941c418abbe1e698fe63fc745b8fd7 100644 (file)
@@ -1135,6 +1135,26 @@ const_costs (r, c, outer_code)
     }
 }
 
+int
+h8300_and_costs (x)
+     rtx x;
+{
+  rtx operands[4];
+
+  if (GET_MODE (x) == QImode)
+    return 1;
+
+  if (GET_MODE (x) != HImode
+      && GET_MODE (x) != SImode)
+    return 100;
+
+  operands[0] = NULL;
+  operands[1] = NULL;
+  operands[2] = XEXP (x, 1);
+  operands[3] = x;
+  return compute_logical_op_length (GET_MODE (x), operands);
+}
+
 int
 h8300_shift_costs (x)
      rtx x;
index a8257113b4dcbb4160d23996ce7dd9ae0eafd4b9..747f7b10c022e951fcfd0ae5d772cbb9d61c3fee 100644 (file)
@@ -1022,6 +1022,8 @@ struct cum_arg
    switch on CODE.  */
 
 #define RTX_COSTS(RTX, CODE, OUTER_CODE)               \
+  case AND:                                            \
+    return COSTS_N_INSNS (h8300_and_costs (RTX));      \
   case MOD:                                            \
   case DIV:                                            \
     return 60;                                         \