i386.c (asm_output_function_prefix): Remove.
* config/i386/i386.c (asm_output_function_prefix): Remove. (ix86_asm_file_end): New. (load_pic_register): Generate pic_label_name into a staticly allocated buffer. * config/i386/i386-protos.h: Update. * config/i386/i386.h (ASM_OUTPUT_FUNCTION_PREFIX): Remove. (ASM_FILE_END): New. * config/i386/i386afe.h: New file. * config.gcc (i?86-*-elf) [tm_file]: Use it. (i?86-*-{freebsd,linux*,moss*}): Likewise. * config/elfos.h (ASM_FILE_END): Undef before redefinition. * config/i386/cygwin.h (ASM_FILE_END): Likewise. * config/i386/osfrose.h (ASM_FILE_END): Invoke ix86_asm_file_end. * config/i386/sco5.h (ASM_FILE_END): Likewise. * config/i386/winnt.c (i386_pe_asm_file_end): Likewise. From-SVN: r39055
This commit is contained in:
parent
ad3b5aff7c
commit
4cf12e7e21
|
@ -1,3 +1,21 @@
|
|||
2001-01-15 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* config/i386/i386.c (asm_output_function_prefix): Remove.
|
||||
(ix86_asm_file_end): New.
|
||||
(load_pic_register): Generate pic_label_name into a
|
||||
staticly allocated buffer.
|
||||
* config/i386/i386-protos.h: Update.
|
||||
* config/i386/i386.h (ASM_OUTPUT_FUNCTION_PREFIX): Remove.
|
||||
(ASM_FILE_END): New.
|
||||
* config/i386/i386afe.h: New file.
|
||||
* config.gcc (i?86-*-elf) [tm_file]: Use it.
|
||||
(i?86-*-{freebsd,linux*,moss*}): Likewise.
|
||||
* config/elfos.h (ASM_FILE_END): Undef before redefinition.
|
||||
* config/i386/cygwin.h (ASM_FILE_END): Likewise.
|
||||
* config/i386/osfrose.h (ASM_FILE_END): Invoke ix86_asm_file_end.
|
||||
* config/i386/sco5.h (ASM_FILE_END): Likewise.
|
||||
* config/i386/winnt.c (i386_pe_asm_file_end): Likewise.
|
||||
|
||||
2001-01-15 Joseph S. Myers <jsm28@cam.ac.uk>
|
||||
|
||||
* Makefile.in (install-man): Remove explicit dependency on
|
||||
|
|
|
@ -979,7 +979,7 @@ i370-*-linux*)
|
|||
;;
|
||||
i[34567]86-*-elf*)
|
||||
xm_file="${xm_file} xm-svr4.h i386/xm-sysv4.h"
|
||||
tm_file="i386/i386.h i386/att.h elfos.h i386/i386elf.h"
|
||||
tm_file="i386/i386.h i386/att.h elfos.h i386/i386afe.h i386/i386elf.h"
|
||||
tmake_file=i386/t-i386elf
|
||||
xmake_file=x-svr4
|
||||
;;
|
||||
|
@ -1095,7 +1095,7 @@ i[34567]86-*-freebsd[12] | i[34567]86-*-freebsd[12].* | i[34567]86-*-freebsd*aou
|
|||
tmake_file=t-freebsd
|
||||
;;
|
||||
i[34567]86-*-freebsd*)
|
||||
tm_file="i386/i386.h i386/att.h svr4.h freebsd.h i386/freebsd.h i386/perform.h"
|
||||
tm_file="i386/i386.h i386/att.h svr4.h freebsd.h i386/i386afe.h i386/freebsd.h i386/perform.h"
|
||||
extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
|
||||
tmake_file=t-freebsd
|
||||
gas=yes
|
||||
|
@ -1166,7 +1166,7 @@ i[34567]86-*-linux*libc1) # Intel 80386's running GNU/Linux
|
|||
# with ELF format using the
|
||||
# GNU/Linux C library 5
|
||||
xmake_file=x-linux
|
||||
tm_file="i386/i386.h i386/att.h linux.h i386/linux.h"
|
||||
tm_file="i386/i386.h i386/att.h linux.h i386/i386afe.h i386/linux.h"
|
||||
tmake_file="t-linux t-linux-gnulibc1 i386/t-crtstuff"
|
||||
extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
|
||||
gnu_ld=yes
|
||||
|
@ -1179,7 +1179,7 @@ i[34567]86-*-linux*) # Intel 80386's running GNU/Linux
|
|||
# with ELF format using glibc 2
|
||||
# aka GNU/Linux C library 6
|
||||
xmake_file=x-linux
|
||||
tm_file="i386/i386.h i386/att.h linux.h i386/linux.h"
|
||||
tm_file="i386/i386.h i386/att.h linux.h i386/i386afe.h i386/linux.h"
|
||||
tmake_file="t-linux i386/t-crtstuff"
|
||||
extra_parts="crtbegin.o crtbeginS.o crtend.o crtendS.o"
|
||||
gnu_ld=yes
|
||||
|
@ -1210,7 +1210,7 @@ i[34567]86-pc-msdosdjgpp*)
|
|||
esac
|
||||
;;
|
||||
i[34567]86-moss-msdos* | i[34567]86-*-moss*)
|
||||
tm_file="i386/i386.h i386/att.h linux.h i386/linux.h i386/moss.h"
|
||||
tm_file="i386/i386.h i386/att.h linux.h i386/i386afe.h i386/linux.h i386/moss.h"
|
||||
tmake_file=t-libc-ok
|
||||
gnu_ld=yes
|
||||
gas=yes
|
||||
|
|
|
@ -100,6 +100,7 @@ Boston, MA 02111-1307, USA. */
|
|||
|
||||
#define IDENT_ASM_OP "\t.ident\t"
|
||||
|
||||
#undef ASM_FILE_END
|
||||
#define ASM_FILE_END(FILE) \
|
||||
do \
|
||||
{ \
|
||||
|
|
|
@ -498,6 +498,7 @@ do { \
|
|||
asm_output_aligned_bss ((FILE), (DECL), (NAME), (SIZE), (ALIGN))
|
||||
|
||||
/* Output function declarations at the end of the file. */
|
||||
#undef ASM_FILE_END
|
||||
#define ASM_FILE_END(FILE) \
|
||||
i386_pe_asm_file_end (FILE)
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ extern void optimization_options PARAMS ((int, int));
|
|||
|
||||
extern int ix86_can_use_return_insn_p PARAMS ((void));
|
||||
|
||||
extern void asm_output_function_prefix PARAMS ((FILE *, const char *));
|
||||
extern void ix86_asm_file_end PARAMS ((FILE *));
|
||||
extern void load_pic_register PARAMS ((void));
|
||||
extern HOST_WIDE_INT ix86_initial_elimination_offset PARAMS((int, int));
|
||||
extern void ix86_expand_prologue PARAMS ((void));
|
||||
|
|
|
@ -1689,44 +1689,53 @@ ix86_can_use_return_insn_p ()
|
|||
return tsize == 0 && nregs == 0;
|
||||
}
|
||||
|
||||
static const char *pic_label_name;
|
||||
static int pic_label_output;
|
||||
static char pic_label_name[32];
|
||||
|
||||
/* This function generates code for -fpic that loads %ebx with
|
||||
the return address of the caller and then returns. */
|
||||
|
||||
void
|
||||
asm_output_function_prefix (file, name)
|
||||
ix86_asm_file_end (file)
|
||||
FILE *file;
|
||||
const char *name ATTRIBUTE_UNUSED;
|
||||
{
|
||||
rtx xops[2];
|
||||
int pic_reg_used = flag_pic && (current_function_uses_pic_offset_table
|
||||
|| current_function_uses_const_pool);
|
||||
|
||||
if (! TARGET_DEEP_BRANCH_PREDICTION || pic_label_name[0] == 0)
|
||||
return;
|
||||
|
||||
#ifdef ASM_OUTPUT_SECTION_NAME
|
||||
/* The trick here is to create a linkonce section containing the
|
||||
pic label thunk, but to refer to it with an internal label.
|
||||
Because the label is internal, we don't have inter-dso name
|
||||
binding issues on hosts that don't support ".hidden".
|
||||
|
||||
In order to use these macros, however, we must create a fake
|
||||
function decl. */
|
||||
{
|
||||
tree decl = build_decl (FUNCTION_DECL,
|
||||
get_identifier ("i686.get_pc_thunk"),
|
||||
error_mark_node);
|
||||
DECL_ONE_ONLY (decl) = 1;
|
||||
UNIQUE_SECTION (decl, 0);
|
||||
named_section (decl, NULL, 0);
|
||||
}
|
||||
#else
|
||||
text_section ();
|
||||
#endif
|
||||
|
||||
/* This used to call ASM_DECLARE_FUNCTION_NAME() but since it's an
|
||||
internal (non-global) label that's being emitted, it didn't make
|
||||
sense to have .type information for local labels. This caused
|
||||
the SCO OpenServer 5.0.4 ELF assembler grief (why are you giving
|
||||
me debug info for a label that you're declaring non-global?) this
|
||||
was changed to call ASM_OUTPUT_LABEL() instead. */
|
||||
|
||||
ASM_OUTPUT_LABEL (file, pic_label_name);
|
||||
|
||||
xops[0] = pic_offset_table_rtx;
|
||||
xops[1] = stack_pointer_rtx;
|
||||
|
||||
/* Deep branch prediction favors having a return for every call. */
|
||||
if (pic_reg_used && TARGET_DEEP_BRANCH_PREDICTION)
|
||||
{
|
||||
if (!pic_label_output)
|
||||
{
|
||||
/* This used to call ASM_DECLARE_FUNCTION_NAME() but since it's an
|
||||
internal (non-global) label that's being emitted, it didn't make
|
||||
sense to have .type information for local labels. This caused
|
||||
the SCO OpenServer 5.0.4 ELF assembler grief (why are you giving
|
||||
me debug info for a label that you're declaring non-global?) this
|
||||
was changed to call ASM_OUTPUT_LABEL() instead. */
|
||||
|
||||
ASM_OUTPUT_LABEL (file, pic_label_name);
|
||||
|
||||
xops[1] = gen_rtx_MEM (SImode, xops[1]);
|
||||
output_asm_insn ("mov{l}\t{%1, %0|%0, %1}", xops);
|
||||
output_asm_insn ("ret", xops);
|
||||
|
||||
pic_label_output = 1;
|
||||
}
|
||||
}
|
||||
xops[1] = gen_rtx_MEM (SImode, stack_pointer_rtx);
|
||||
output_asm_insn ("mov{l}\t{%1, %0|%0, %1}", xops);
|
||||
output_asm_insn ("ret", xops);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1738,12 +1747,8 @@ load_pic_register ()
|
|||
|
||||
if (TARGET_DEEP_BRANCH_PREDICTION)
|
||||
{
|
||||
if (pic_label_name == NULL)
|
||||
{
|
||||
char buf[32];
|
||||
ASM_GENERATE_INTERNAL_LABEL (buf, "LPR", 0);
|
||||
pic_label_name = ggc_strdup (buf);
|
||||
}
|
||||
if (! pic_label_name[0])
|
||||
ASM_GENERATE_INTERNAL_LABEL (pic_label_name, "LPR", 0);
|
||||
pclab = gen_rtx_MEM (QImode, gen_rtx_SYMBOL_REF (Pmode, pic_label_name));
|
||||
}
|
||||
else
|
||||
|
@ -1951,8 +1956,8 @@ ix86_emit_save_regs ()
|
|||
void
|
||||
ix86_expand_prologue ()
|
||||
{
|
||||
HOST_WIDE_INT tsize = ix86_compute_frame_size (get_frame_size (), (int *) 0, (int *) 0,
|
||||
(int *) 0);
|
||||
HOST_WIDE_INT tsize = ix86_compute_frame_size (get_frame_size (), (int *) 0,
|
||||
(int *) 0, (int *) 0);
|
||||
rtx insn;
|
||||
int pic_reg_used = flag_pic && (current_function_uses_pic_offset_table
|
||||
|| current_function_uses_const_pool);
|
||||
|
|
|
@ -1356,13 +1356,11 @@ typedef struct ix86_args {
|
|||
|| ! FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (TREE_TYPE (DECL)))) \
|
||||
|| FLOAT_MODE_P (TYPE_MODE (TREE_TYPE (TREE_TYPE (cfun->decl))))))
|
||||
|
||||
/* This macro is invoked just before the start of a function.
|
||||
It is used here to output code for -fpic that will load the
|
||||
return address into %ebx. */
|
||||
/* This macro is invoked at the end of compilation. It is used here to
|
||||
output code for -fpic that will load the return address into %ebx. */
|
||||
|
||||
#undef ASM_OUTPUT_FUNCTION_PREFIX
|
||||
#define ASM_OUTPUT_FUNCTION_PREFIX(FILE, FNNAME) \
|
||||
asm_output_function_prefix (FILE, FNNAME)
|
||||
#undef ASM_FILE_END
|
||||
#define ASM_FILE_END(FILE) ix86_asm_file_end (FILE)
|
||||
|
||||
/* Output assembler code to FILE to increment profiler label # LABELNO
|
||||
for profiling a function entry. */
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
/* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GNU CC.
|
||||
|
||||
GNU CC is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2, or (at your option)
|
||||
any later version.
|
||||
|
||||
GNU CC is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with GNU CC; see the file COPYING. If not, write to
|
||||
the Free Software Foundation, 59 Temple Place - Suite 330,
|
||||
Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* Irritatingly, config/elfos.h defines its own version of ASM_FILE_END,
|
||||
conflicting with a definition which we wish to have in i386/i386.h.
|
||||
We _really_ need to clean up the hodge-podge of random macro placement
|
||||
in the configury... */
|
||||
|
||||
/* This macro is invoked at the end of compilation. It is used here to
|
||||
output code for -fpic that will load the return address into %ebx. */
|
||||
|
||||
#undef ASM_FILE_END
|
||||
#define ASM_FILE_END(FILE) \
|
||||
do \
|
||||
{ \
|
||||
ix86_asm_file_end (FILE); \
|
||||
if (!flag_no_ident) \
|
||||
fprintf ((FILE), "%s\"GCC: (GNU) %s\"\n", \
|
||||
IDENT_ASM_OP, version_string); \
|
||||
} \
|
||||
while (0)
|
|
@ -752,12 +752,13 @@ while (0)
|
|||
#define SCCS_DIRECTIVE
|
||||
|
||||
/* This says what to print at the end of the assembly file */
|
||||
#undef ASM_FILE_END
|
||||
#define ASM_FILE_END(STREAM) \
|
||||
do \
|
||||
{ \
|
||||
if (HALF_PIC_P ()) \
|
||||
HALF_PIC_FINISH (STREAM); \
|
||||
\
|
||||
ix86_asm_file_end (STREAM); \
|
||||
if (!flag_no_ident) \
|
||||
{ \
|
||||
char *fstart = main_input_filename; \
|
||||
|
|
|
@ -213,6 +213,7 @@ do { \
|
|||
#undef ASM_FILE_END
|
||||
#define ASM_FILE_END(FILE) \
|
||||
do { \
|
||||
ix86_asm_file_end (FILE); \
|
||||
if (!flag_no_ident) \
|
||||
fprintf ((FILE), "%s\"GCC: (GNU) %s\"\n", \
|
||||
IDENT_ASM_OP, version_string); \
|
||||
|
|
|
@ -592,6 +592,8 @@ i386_pe_asm_file_end (file)
|
|||
{
|
||||
struct extern_list *p;
|
||||
|
||||
ix86_asm_file_end (file);
|
||||
|
||||
for (p = extern_head; p != NULL; p = p->next)
|
||||
{
|
||||
tree decl;
|
||||
|
|
Loading…
Reference in New Issue