Patchwork [IA64] Hookize PRINT_OPERAND, PRINT_OPERAND_ADDRESS and PRINT_OPERAND_PUNCT_VALID_P

login
register
mail settings
Submitter Anatoly Sokolov
Date Nov. 30, 2011, 5:30 p.m.
Message ID <466464314.20111130213032@post.ru>
Download mbox | patch
Permalink /patch/128539/
State New
Headers show

Comments

Anatoly Sokolov - Nov. 30, 2011, 5:30 p.m.
Hello.

  This patch removes obsolete PRINT_OPERAND, PRINT_OPERAND_ADDRESS and 
PRINT_OPERAND_PUNCT_VALID_P macros from IA64 back end in the GCC and 
introduces equivalent TARGET_PRINT_OPERAND, TARGET_PRINT_OPERAND_ADDRESS and
TARGET_PRINT_OPERAND_PUNCT_VALID_P target hooks.

  Bootstrapped and regression tested on ia64-unknown-linux-gnu.

        * config/ia64/ia64.h (PRINT_OPERAND, PRINT_OPERAND_ADDRESS,
        PRINT_OPERAND_PUNCT_VALID_P): Remove macros.
        * config/ia64/ia64-protos.h (ia64_print_operand,
        ia64_print_operand_address): Remove.
        * config/ia64/ia64.c (TARGET_PRINT_OPERAND,
        TARGET_PRINT_OPERAND_ADDRESS, TARGET_PRINT_OPERAND_PUNCT_VALID_P):
        Define.
        (ia64_print_operand_punct_valid_p): New function.
        (ia64_print_operand, ia64_print_operand_address): Make static.


Anatoly.
Richard Henderson - Nov. 30, 2011, 9:39 p.m.
On 11/30/2011 09:30 AM, Anatoly Sokolov wrote:
>         * config/ia64/ia64.h (PRINT_OPERAND, PRINT_OPERAND_ADDRESS,
>         PRINT_OPERAND_PUNCT_VALID_P): Remove macros.
>         * config/ia64/ia64-protos.h (ia64_print_operand,
>         ia64_print_operand_address): Remove.
>         * config/ia64/ia64.c (TARGET_PRINT_OPERAND,
>         TARGET_PRINT_OPERAND_ADDRESS, TARGET_PRINT_OPERAND_PUNCT_VALID_P):
>         Define.
>         (ia64_print_operand_punct_valid_p): New function.
>         (ia64_print_operand, ia64_print_operand_address): Make static.

Ok.


r~

Patch

Index: gcc/config/ia64/ia64.c
===================================================================
--- gcc/config/ia64/ia64.c      (revision 181759)
+++ gcc/config/ia64/ia64.c      (working copy)
@@ -234,6 +234,10 @@ 
 static void ia64_output_function_epilogue (FILE *, HOST_WIDE_INT);
 static void ia64_output_function_end_prologue (FILE *);
 
+static void ia64_print_operand (FILE *, rtx, int);
+static void ia64_print_operand_address (FILE *, rtx);
+static bool ia64_print_operand_punct_valid_p (unsigned char code);
+
 static int ia64_issue_rate (void);
 static int ia64_adjust_cost_2 (rtx, int, rtx, int, dw_t);
 static void ia64_sched_init (FILE *, int, int);
@@ -383,6 +387,13 @@ 
 #undef TARGET_ASM_FUNCTION_EPILOGUE
 #define TARGET_ASM_FUNCTION_EPILOGUE ia64_output_function_epilogue
 
+#undef TARGET_PRINT_OPERAND
+#define TARGET_PRINT_OPERAND ia64_print_operand
+#undef TARGET_PRINT_OPERAND_ADDRESS
+#define TARGET_PRINT_OPERAND_ADDRESS ia64_print_operand_address
+#undef TARGET_PRINT_OPERAND_PUNCT_VALID_P
+#define TARGET_PRINT_OPERAND_PUNCT_VALID_P ia64_print_operand_punct_valid_p
+
 #undef TARGET_IN_SMALL_DATA_P
 #define TARGET_IN_SMALL_DATA_P  ia64_in_small_data_p
 
@@ -4966,7 +4977,7 @@ 
 /* ??? Do we need this?  It gets used only for 'a' operands.  We could perhaps
    also call this from ia64_print_operand for memory addresses.  */
 
-void
+static void
 ia64_print_operand_address (FILE * stream ATTRIBUTE_UNUSED,
                            rtx address ATTRIBUTE_UNUSED)
 {
@@ -4997,7 +5008,7 @@ 
        Linux kernel.
    v    Print vector constant value as an 8-byte integer value.  */
 
-void
+static void
 ia64_print_operand (FILE * file, rtx x, int code)
 {
   const char *str;
@@ -5284,6 +5295,14 @@ 
 
   return;
 }
+
+/* Worker function for TARGET_PRINT_OPERAND_PUNCT_VALID_P.  */
+
+static bool
+ia64_print_operand_punct_valid_p (unsigned char code)
+{
+  return (code == '+' || code == ',');
+}
 
 /* Compute a (partial) cost for rtx X.  Return true if the complete
    cost has been computed, and false if subexpressions should be
Index: gcc/config/ia64/ia64.h
===================================================================
--- gcc/config/ia64/ia64.h      (revision 181759)
+++ gcc/config/ia64/ia64.h      (working copy)
@@ -1512,27 +1512,6 @@ 
   { "loc79", LOC_REG (79) },                                           \
 }
 
-/* A C compound statement to output to stdio stream STREAM the assembler syntax
-   for an instruction operand X.  X is an RTL expression.  */
-
-#define PRINT_OPERAND(STREAM, X, CODE) \
-  ia64_print_operand (STREAM, X, CODE)
-
-/* A C expression which evaluates to true if CODE is a valid punctuation
-   character for use in the `PRINT_OPERAND' macro.  */
-
-/* ??? Keep this around for now, as we might need it later.  */
-
-#define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
-  ((CODE) == '+' || (CODE) == ',')
-
-/* A C compound statement to output to stdio stream STREAM the assembler syntax
-   for an instruction operand that is a memory reference whose address is X.  X
-   is an RTL expression.  */
-
-#define PRINT_OPERAND_ADDRESS(STREAM, X) \
-  ia64_print_operand_address (STREAM, X)
-
 /* If defined, C string expressions to be used for the `%R', `%L', `%U', and
    `%I' options of `asm_fprintf' (see `final.c').  */
 
Index: gcc/config/ia64/ia64-protos.h
===================================================================
--- gcc/config/ia64/ia64-protos.h       (revision 181759)
+++ gcc/config/ia64/ia64-protos.h       (working copy)
@@ -58,8 +58,6 @@ 
 extern bool ia64_expand_load_address (rtx, rtx);
 extern int ia64_hard_regno_rename_ok (int, int);
 
-extern void ia64_print_operand_address (FILE *, rtx);
-extern void ia64_print_operand (FILE *, rtx, int);
 extern enum reg_class ia64_secondary_reload_class (enum reg_class,
                                                   enum machine_mode, rtx);
 extern const char *get_bundle_name (int);