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]
Other format: [Raw text]

S/390: Clean up linux.h


Hello,

I've committed this patch to clean up config/s390/linux.h by:

- Removing the completely unused macros ASM_DOUBLE and
  _ASM_OUTPUT_LONG

- Removing the LPREFIX macro after changing all remaining
  users to use the standard ASM_GENERATE_INTERNAL_LABEL
  instead

- Moving the remaining non-Linux-specific macros to s390.h

This patch should not cause any change in gcc output.

Bootstrapped/regtested on s390-ibm-linux and s390x-ibm-linux.

ChangeLog:

      * config/s390/linux.h (ASM_DOUBLE, _ASM_OUTPUT_LONG): Remove.
      (LPREFIX): Likewise.
      (ASM_COMMENT_START, LOCAL_LABEL_PREFIX, ASM_FORMAT_PRIVATE_NAME,
      ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT,
      ASM_OUTPUT_ALIGN, ASM_OUTPUT_SKIP, ASM_OUTPUT_ALIGNED_BSS,
      TEXT_SECTION_ASM_OP, DATA_SECTION_ASM_OP, BSS_SECTION_ASM_OP,
      GLOBAL_ASM_OP, ASM_OUTPUT_MI_THUNK): Move to s390.h.

      * config/s390/s390.h (ASM_COMMENT_START, LOCAL_LABEL_PREFIX,
      ASM_FORMAT_PRIVATE_NAME, ASM_OUTPUT_ALIGN, ASM_OUTPUT_SKIP,
      ASM_OUTPUT_ALIGNED_BSS, TEXT_SECTION_ASM_OP, DATA_SECTION_ASM_OP,
      BSS_SECTION_ASM_OP): Move from linux.h.
      (ASM_OUTPUT_ADDR_VEC_ELT, ASM_OUTPUT_ADDR_DIFF_ELT): Likewise.
      Also, use ASM_GENERATE_INTERNAL_LABEL instead of LPREFIX.

      * config/s390/s390.c (s390_function_profiler): Use
      ASM_GENERATE_INTERNAL_LABEL instead of LPREFIX.

Index: gcc/config/s390/linux.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/s390/linux.h,v
retrieving revision 1.25
diff -c -p -r1.25 linux.h
*** gcc/config/s390/linux.h   31 Jul 2002 02:13:33 -0000    1.25
--- gcc/config/s390/linux.h   16 Oct 2002 17:01:49 -0000
*************** Boston, MA 02111-1307, USA.  */
*** 126,287 ****
    { "link_arch64",    LINK_ARCH64_SPEC },     \


- /* Character to start a comment.  */
-
- #define ASM_COMMENT_START "#"
-
-
- /* Assembler pseudos to introduce constants of various size.  */
-
- #define ASM_DOUBLE "\t.double"
-
- /* The LOCAL_LABEL_PREFIX variable is used by dbxelf.h.  */
- #define LOCAL_LABEL_PREFIX "."
-
- /* Prefix for internally generated assembler labels.  */
- #define LPREFIX ".L"
-
- /* Store in OUTPUT a string (made with alloca) containing
-    an assembler-name for a local static variable named NAME.
-    LABELNO is an integer which is different for each call.  */
-
- #undef ASM_FORMAT_PRIVATE_NAME
- #define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO)  \
- ( (OUTPUT) = (char *) alloca (strlen ((NAME)) + 10),    \
-   sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO)))
-
-
-      /* internal macro to output long */
- #define _ASM_OUTPUT_LONG(FILE, VALUE)                                   \
-       fprintf (FILE, "\t.long\t0x%lX\n", VALUE);
-
-
- /* This is how to output an element of a case-vector that is absolute.
*/
-
- #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE)                    \
-   fprintf (FILE, "%s%s%d\n", integer_asm_op (UNITS_PER_WORD, TRUE), \
-        LPREFIX, VALUE)
-
- /* This is how to output an element of a case-vector that is relative.
*/
-
- #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL)        \
-   fprintf (FILE, "%s%s%d-%s%d\n", integer_asm_op (UNITS_PER_WORD, TRUE),
\
-        LPREFIX, VALUE, LPREFIX, REL)
-
-
-
- /* This is how to output an assembler line
-    that says to advance the location counter
-    to a multiple of 2**LOG bytes.  */
-
- #undef ASM_OUTPUT_ALIGN
- #define ASM_OUTPUT_ALIGN(FILE, LOG)     \
-     if ((LOG)!=0) fprintf ((FILE), "\t.align\t%d\n", 1<<(LOG))
-
- /* This is how to output an assembler line
-    that says to advance the location counter by SIZE bytes.  */
-
- #undef ASM_OUTPUT_SKIP
- #define ASM_OUTPUT_SKIP(FILE, SIZE)  \
-   fprintf ((FILE), "\t.set\t.,.+%u\n", (SIZE))
-
- /* This is how to output assembler code to declare an
-    uninitialized external linkage data object.  */
-
- #undef ASM_OUTPUT_ALIGNED_BSS
- #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
-   asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
-
- /* Output before read-only data.  */
-
- #define TEXT_SECTION_ASM_OP ".text"
-
- /* Output before writable (initialized) data.  */
-
- #define DATA_SECTION_ASM_OP ".data"
-
- /* Output before writable (uninitialized) data.  */
-
- #define BSS_SECTION_ASM_OP ".bss"
-
- /* This is how to output a command to make the user-level label named
NAME
-    defined for reference from other files.  */
-
- /* Globalizing directive for a label.  */
- #define GLOBAL_ASM_OP ".globl "
-
- /* Output code to add DELTA to the first argument, and then jump to
FUNCTION.
-    Used for C++ multiple inheritance.  */
- #define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION)
\
- do {
\
-   if (TARGET_64BIT)
\
-     {
\
-       if (flag_pic)
\
-         {
\
-           fprintf (FILE, "\tlarl  1,0f\n");
\
-           fprintf (FILE, "\tagf   %d,0(1)\n",
\
-                    aggregate_value_p (TREE_TYPE
\
-                                       (TREE_TYPE (FUNCTION))) ? 3 :2 );
\
-           fprintf (FILE, "\tlarl  1,");
\
-           assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0));
\
-           fprintf (FILE, "@GOTENT\n");
\
-           fprintf (FILE, "\tlg    1,0(1)\n");
\
-           fprintf (FILE, "\tbr    1\n");
\
-           fprintf (FILE, "0:\t.long  ");
\
-           fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, (DELTA));
\
-           fprintf (FILE, "\n");
\
-         }
\
-       else
\
-         {
\
-           fprintf (FILE, "\tlarl  1,0f\n");
\
-           fprintf (FILE, "\tagf   %d,0(1)\n",
\
-           aggregate_value_p (TREE_TYPE
\
-                              (TREE_TYPE (FUNCTION))) ? 3 :2 );
\
-           fprintf (FILE, "\tjg  ");
\
-           assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0));
\
-           fprintf (FILE, "\n");
\
-           fprintf (FILE, "0:\t.long  ");
\
-           fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, (DELTA));
\
-           fprintf (FILE, "\n");
\
-         }
\
-     }
\
-   else
\
-     {
\
-       if (flag_pic)
\
-         {
\
-           fprintf (FILE, "\tbras  1,0f\n");
\
-           fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_-.\n");
\
-           fprintf (FILE, "\t.long  ");
\
-           assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0));
\
-           fprintf (FILE, "@GOT\n");
\
-           fprintf (FILE, "\t.long  ");
\
-           fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, (DELTA));
\
-           fprintf (FILE, "\n");
\
-           fprintf (FILE, "0:\tal  %d,8(1)\n",
\
-                    aggregate_value_p (TREE_TYPE
\
-                                       (TREE_TYPE (FUNCTION))) ? 3 : 2 );
\
-           fprintf (FILE, "\tl     0,4(1)\n");
\
-           fprintf (FILE, "\tal    1,0(1)\n");
\
-           fprintf (FILE, "\talr   1,0\n");
\
-           fprintf (FILE, "\tl     1,0(1)\n");
\
-           fprintf (FILE, "\tbr    1\n");
\
-         } else {
\
-           fprintf (FILE, "\tbras  1,0f\n");
\
-           fprintf (FILE, "\t.long  ");
\
-           assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0));
\
-           fprintf (FILE, "-.\n");
\
-           fprintf (FILE, "\t.long  ");
\
-           fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, (DELTA));
\
-           fprintf (FILE, "\n");
\
-           fprintf (FILE, "0:\tal  %d,4(1)\n",
\
-                    aggregate_value_p (TREE_TYPE
\
-                                       (TREE_TYPE (FUNCTION))) ? 3 : 2 );
\
-           fprintf (FILE, "\tal    1,0(1)\n");
\
-           fprintf (FILE, "\tbr    1\n");
\
-        }
\
-     }
\
- } while (0)
-
  /* Do code reading to identify a signal frame, and set the frame
     state data appropriately.  See unwind-dw2.c for the structs.  */

--- 126,131 ----
Index: gcc/config/s390/s390.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/s390/s390.c,v
retrieving revision 1.57
diff -c -p -r1.57 s390.c
*** gcc/config/s390/s390.c    15 Oct 2002 16:27:34 -0000    1.57
--- gcc/config/s390/s390.c    16 Oct 2002 17:01:52 -0000
*************** s390_function_profiler (file, labelno)
*** 5487,5493 ****
    rtx op[7];

    char label[128];
!   sprintf (label, "%sP%d", LPREFIX, labelno);

    fprintf (file, "# function profiler \n");

--- 5487,5493 ----
    rtx op[7];

    char label[128];
!   ASM_GENERATE_INTERNAL_LABEL (label, "LP", labelno);

    fprintf (file, "# function profiler \n");

Index: gcc/config/s390/s390.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config/s390/s390.h,v
retrieving revision 1.44
diff -c -p -r1.44 s390.h
*** gcc/config/s390/s390.h    15 Oct 2002 16:27:34 -0000    1.44
--- gcc/config/s390/s390.h    16 Oct 2002 17:01:53 -0000
*************** CUMULATIVE_ARGS;
*** 854,859 ****
--- 854,932 ----

  #define EXIT_IGNORE_STACK       1

+ /* Output code to add DELTA to the first argument, and then jump to
FUNCTION.
+    Used for C++ multiple inheritance.  */
+ #define ASM_OUTPUT_MI_THUNK(FILE, THUNK_FNDECL, DELTA, FUNCTION)
\
+ do {
\
+   if (TARGET_64BIT)
\
+     {
\
+       if (flag_pic)
\
+         {
\
+           fprintf (FILE, "\tlarl  1,0f\n");
\
+           fprintf (FILE, "\tagf   %d,0(1)\n",
\
+                    aggregate_value_p (TREE_TYPE
\
+                                       (TREE_TYPE (FUNCTION))) ? 3 :2 );
\
+           fprintf (FILE, "\tlarl  1,");
\
+           assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0));
\
+           fprintf (FILE, "@GOTENT\n");
\
+           fprintf (FILE, "\tlg    1,0(1)\n");
\
+           fprintf (FILE, "\tbr    1\n");
\
+           fprintf (FILE, "0:\t.long  ");
\
+           fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, (DELTA));
\
+           fprintf (FILE, "\n");
\
+         }
\
+       else
\
+         {
\
+           fprintf (FILE, "\tlarl  1,0f\n");
\
+           fprintf (FILE, "\tagf   %d,0(1)\n",
\
+           aggregate_value_p (TREE_TYPE
\
+                              (TREE_TYPE (FUNCTION))) ? 3 :2 );
\
+           fprintf (FILE, "\tjg  ");
\
+           assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0));
\
+           fprintf (FILE, "\n");
\
+           fprintf (FILE, "0:\t.long  ");
\
+           fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, (DELTA));
\
+           fprintf (FILE, "\n");
\
+         }
\
+     }
\
+   else
\
+     {
\
+       if (flag_pic)
\
+         {
\
+           fprintf (FILE, "\tbras  1,0f\n");
\
+           fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_-.\n");
\
+           fprintf (FILE, "\t.long  ");
\
+           assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0));
\
+           fprintf (FILE, "@GOT\n");
\
+           fprintf (FILE, "\t.long  ");
\
+           fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, (DELTA));
\
+           fprintf (FILE, "\n");
\
+           fprintf (FILE, "0:\tal  %d,8(1)\n",
\
+                    aggregate_value_p (TREE_TYPE
\
+                                       (TREE_TYPE (FUNCTION))) ? 3 : 2 );
\
+           fprintf (FILE, "\tl     0,4(1)\n");
\
+           fprintf (FILE, "\tal    1,0(1)\n");
\
+           fprintf (FILE, "\talr   1,0\n");
\
+           fprintf (FILE, "\tl     1,0(1)\n");
\
+           fprintf (FILE, "\tbr    1\n");
\
+         } else {
\
+           fprintf (FILE, "\tbras  1,0f\n");
\
+           fprintf (FILE, "\t.long  ");
\
+           assemble_name (FILE, XSTR (XEXP (DECL_RTL (FUNCTION), 0), 0));
\
+           fprintf (FILE, "-.\n");
\
+           fprintf (FILE, "\t.long  ");
\
+           fprintf (FILE, HOST_WIDE_INT_PRINT_DEC, (DELTA));
\
+           fprintf (FILE, "\n");
\
+           fprintf (FILE, "0:\tal  %d,4(1)\n",
\
+                    aggregate_value_p (TREE_TYPE
\
+                                       (TREE_TYPE (FUNCTION))) ? 3 : 2 );
\
+           fprintf (FILE, "\tal    1,0(1)\n");
\
+           fprintf (FILE, "\tbr    1\n");
\
+        }
\
+     }
\
+ } while (0)
+
+
  /* Addressing modes, and classification of registers for them.  */

  /* #define HAVE_POST_INCREMENT */
*************** CUMULATIVE_ARGS;
*** 1237,1246 ****

  extern struct rtx_def *s390_compare_op0, *s390_compare_op1;


  /* How to refer to registers in assembler output.  This sequence is
     indexed by compiler's hard-register-number (see above).  */
-
  #define REGISTER_NAMES                                          \
  { "%r0",  "%r1",  "%r2",  "%r3",  "%r4",  "%r5",  "%r6",  "%r7",      \
    "%r8",  "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15",      \
--- 1310,1352 ----

  extern struct rtx_def *s390_compare_op0, *s390_compare_op1;

+ /* implicit call of memcpy, not bcopy   */
+
+ #define TARGET_MEM_FUNCTIONS
+
+
+ /* Assembler file format.  */
+
+ /* Character to start a comment.  */
+ #define ASM_COMMENT_START "#"
+
+ /* Declare an uninitialized external linkage data object.  */
+ #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
+   asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
+
+ /* Globalizing directive for a label.  */
+ #define GLOBAL_ASM_OP ".globl "
+
+ /* Advance the location counter to a multiple of 2**LOG bytes.  */
+ #define ASM_OUTPUT_ALIGN(FILE, LOG) \
+   if ((LOG)) fprintf ((FILE), "\t.align\t%d\n", 1 << (LOG))
+
+ /* Advance the location counter by SIZE bytes.  */
+ #define ASM_OUTPUT_SKIP(FILE, SIZE) \
+   fprintf ((FILE), "\t.set\t.,.+%u\n", (SIZE))
+
+ /* Store in OUTPUT a string (made with alloca) containing
+    an assembler-name for a local static variable named NAME.
+    LABELNO is an integer which is different for each call.  */
+ #define ASM_FORMAT_PRIVATE_NAME(OUTPUT, NAME, LABELNO)    \
+   ((OUTPUT) = (char *) alloca (strlen ((NAME)) + 10),     \
+    sprintf ((OUTPUT), "%s.%d", (NAME), (LABELNO)))
+
+ /* The LOCAL_LABEL_PREFIX variable is used by dbxelf.h.  */
+ #define LOCAL_LABEL_PREFIX "."

  /* How to refer to registers in assembler output.  This sequence is
     indexed by compiler's hard-register-number (see above).  */
  #define REGISTER_NAMES                                          \
  { "%r0",  "%r1",  "%r2",  "%r3",  "%r4",  "%r5",  "%r6",  "%r7",      \
    "%r8",  "%r9", "%r10", "%r11", "%r12", "%r13", "%r14", "%r15",      \
*************** extern struct rtx_def *s390_compare_op0,
*** 1249,1271 ****
    "%ap",  "%cc",  "%fp"                                         \
  }

- /* implicit call of memcpy, not bcopy   */
-
- #define TARGET_MEM_FUNCTIONS
-
  /* Either simplify a location expression, or return the original.  */
-
  #define ASM_SIMPLIFY_DWARF_ADDR(X) \
    s390_simplify_dwarf_addr (X)

! /* Print operand X (an rtx) in assembler syntax to file FILE.
!    CODE is a letter or dot (`z' in `%z0') or 0 if no letter was
specified.
!    For `%' followed by punctuation, CODE is the punctuation and X is
null.  */
!
  #define PRINT_OPERAND(FILE, X, CODE) print_operand (FILE, X, CODE)
-
  #define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE,
ADDR)


  /* Define the codes that are matched by predicates in aux-output.c.  */

--- 1355,1391 ----
    "%ap",  "%cc",  "%fp"                                         \
  }

  /* Either simplify a location expression, or return the original.  */
  #define ASM_SIMPLIFY_DWARF_ADDR(X) \
    s390_simplify_dwarf_addr (X)

! /* Print operand X (an rtx) in assembler syntax to file FILE.  */
  #define PRINT_OPERAND(FILE, X, CODE) print_operand (FILE, X, CODE)
  #define PRINT_OPERAND_ADDRESS(FILE, ADDR) print_operand_address (FILE,
ADDR)

+ /* Output an element of a case-vector that is absolute.  */
+ #define ASM_OUTPUT_ADDR_VEC_ELT(FILE, VALUE)                    \
+ do {                                                      \
+   char buf[32];                                           \
+   fputs (integer_asm_op (UNITS_PER_WORD, TRUE), (FILE));        \
+   ASM_GENERATE_INTERNAL_LABEL (buf, "L", (VALUE));              \
+   assemble_name ((FILE), buf);                                  \
+   fputc ('\n', (FILE));                                         \
+ } while (0)
+
+ /* Output an element of a case-vector that is relative.  */
+ #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, BODY, VALUE, REL)        \
+ do {                                                      \
+   char buf[32];                                           \
+   fputs (integer_asm_op (UNITS_PER_WORD, TRUE), (FILE));        \
+   ASM_GENERATE_INTERNAL_LABEL (buf, "L", (VALUE));              \
+   assemble_name ((FILE), buf);                                  \
+   fputc ('-', (FILE));                                          \
+   ASM_GENERATE_INTERNAL_LABEL (buf, "L", (REL));                \
+   assemble_name ((FILE), buf);                                  \
+   fputc ('\n', (FILE));                                         \
+ } while (0)
+

  /* Define the codes that are matched by predicates in aux-output.c.  */

*************** extern struct rtx_def *s390_compare_op0,
*** 1281,1286 ****
--- 1401,1417 ----
                     CONST_INT, CONST_DOUBLE }},                  \
    {"s390_plus_operand", { PLUS }},

+
+ /* Sections.  */
+
+ /* Output before read-only data.  */
+ #define TEXT_SECTION_ASM_OP ".text"
+
+ /* Output before writable (initialized) data.  */
+ #define DATA_SECTION_ASM_OP ".data"
+
+ /* Output before writable (uninitialized) data.  */
+ #define BSS_SECTION_ASM_OP ".bss"

  /* S/390 constant pool breaks the devices in crtstuff.c to control
section
     in where code resides.  We have to write it as asm code.  */

Mit freundlichen Gruessen / Best Regards

Ulrich Weigand

--
  Dr. Ulrich Weigand
  Linux for S/390 Design & Development
  IBM Deutschland Entwicklung GmbH, Schoenaicher Str. 220, 71032 Boeblingen
  Phone: +49-7031/16-3727   ---   Email: Ulrich.Weigand@de.ibm.com


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