mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-26 02:49:03 +08:00
linux.h (ASM_DOUBLE, [...]): Remove.
* 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. From-SVN: r58219
This commit is contained in:
parent
451c08992e
commit
63a1ff8624
@ -1,3 +1,23 @@
|
||||
2002-10-16 Ulrich Weigand <uweigand@de.ibm.com>
|
||||
|
||||
* 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.
|
||||
|
||||
2002-10-15 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* real.c (real_to_decimal): Accept BUF_SIZE and CROP_TRAILING_ZEROS
|
||||
|
@ -126,162 +126,6 @@ Boston, MA 02111-1307, USA. */
|
||||
{ "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. */
|
||||
|
||||
|
@ -5487,7 +5487,7 @@ s390_function_profiler (file, labelno)
|
||||
rtx op[7];
|
||||
|
||||
char label[128];
|
||||
sprintf (label, "%sP%d", LPREFIX, labelno);
|
||||
ASM_GENERATE_INTERNAL_LABEL (label, "LP", labelno);
|
||||
|
||||
fprintf (file, "# function profiler \n");
|
||||
|
||||
|
@ -854,6 +854,79 @@ CUMULATIVE_ARGS;
|
||||
|
||||
#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 */
|
||||
@ -1237,10 +1310,43 @@ CUMULATIVE_ARGS;
|
||||
|
||||
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", \
|
||||
@ -1249,23 +1355,37 @@ extern struct rtx_def *s390_compare_op0, *s390_compare_op1;
|
||||
"%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. */
|
||||
|
||||
/* 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. */
|
||||
|
||||
@ -1282,6 +1402,17 @@ extern struct rtx_def *s390_compare_op0, *s390_compare_op1;
|
||||
{"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. */
|
||||
#ifndef __s390x__
|
||||
|
Loading…
Reference in New Issue
Block a user