config.gcc: Remove support for sparc-*-openbsd*...

gcc/
	* config.gcc: Remove support for sparc-*-openbsd*,
	i860-*-sysv4*, ip2k-*-elf, ns32k-*-netbsdelf*,
	ns32k-*-netbsd*.
	* config.host: Remove support for i860-*-sysv4* as a host.
	* config/i860/*, config/ip2k/*, config/ns32k/*,
	config/sparc/openbsd.h, config/sparc/t-openbsd: Remove.
	* doc/install.texi, doc/invoke.texi, doc/md.texi: Don't
	mention obsolete ports.

testsuite/
	* gcc.dg/20020312-2.c, gcc.dg/sibcall-3.c, gcc.dg/sibcall-4.c,
	gcc.dg/cpp/assert4.c: Don't mention obsolete ports.

From-SVN: r102189
This commit is contained in:
Kazu Hirata 2005-07-20 06:39:38 +00:00 committed by Kazu Hirata
parent 96a2347e1d
commit fdda361d74
40 changed files with 19 additions and 28579 deletions

View File

@ -1,3 +1,14 @@
2005-07-20 Kazu Hirata <kazu@codesourcery.com>
* config.gcc: Remove support for sparc-*-openbsd*,
i860-*-sysv4*, ip2k-*-elf, ns32k-*-netbsdelf*,
ns32k-*-netbsd*.
* config.host: Remove support for i860-*-sysv4* as a host.
* config/i860/*, config/ip2k/*, config/ns32k/*,
config/sparc/openbsd.h, config/sparc/t-openbsd: Remove.
* doc/install.texi, doc/invoke.texi, doc/md.texi: Don't
mention obsolete ports.
2005-07-20 Kaz Kojima <kkojima@gcc.gnu.org>
* config/sh/sh.c (regno_reg_class): Add GENERAL_REGS for

View File

@ -184,12 +184,7 @@ md_file=
# Obsolete configurations.
case ${target} in
sparc-*-openbsd* \
| i860-*-sysv4* \
| ip2k-*-elf \
| ns32k-*-netbsdelf* \
| ns32k-*-netbsd* \
| c4x-* \
c4x-* \
| tic4x-* \
)
if test "x$enable_obsolete" != xyes; then
@ -1226,12 +1221,6 @@ i[34567]86-*-kaos*)
tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h i386/i386elf.h kaos.h i386/kaos-i386.h"
tmake_file="i386/t-i386elf t-svr4"
;;
i860-*-sysv4*)
tm_file="${tm_file} elfos.h svr4.h i860/sysv4.h"
tmake_file="i860/t-i860 i860/t-svr4"
extra_parts="crtbegin.o crtend.o"
use_fixproto=yes
;;
ia64*-*-elf*)
tm_file="${tm_file} dbxelf.h elfos.h ia64/sysv4.h ia64/elf.h"
tmake_file="ia64/t-ia64"
@ -1279,10 +1268,6 @@ ia64*-*-hpux*)
# in ia64/t-hpux, and also fix the definition of putenv in
# sys-protos.h (const char not char).
;;
ip2k-*-elf)
tm_file="elfos.h ${tm_file}"
use_fixproto=yes
;;
iq2000*-*-elf*)
tm_file="svr4.h elfos.h iq2000/iq2000.h"
tmake_file=iq2000/t-iq2000
@ -1557,16 +1542,6 @@ mn10300-*-*)
use_collect2=no
use_fixproto=yes
;;
ns32k-*-netbsdelf*)
echo "GCC does not yet support the ${target} target"; exit 1
;;
ns32k-*-netbsd*)
tm_file="${tm_file} netbsd.h netbsd-aout.h ns32k/netbsd.h"
# On NetBSD, the headers are already okay, except for math.h.
tmake_file="t-netbsd ns32k/t-ns32k"
extra_parts=""
use_collect2=yes
;;
pdp11-*-bsd)
tm_file="${tm_file} pdp11/2bsd.h"
use_fixproto=yes
@ -1995,14 +1970,6 @@ sparc-*-netbsdelf*)
tm_file="${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h netbsd.h netbsd-elf.h sparc/netbsd-elf.h"
extra_options="${extra_options} sparc/long-double-switch.opt"
;;
sparc-*-openbsd*)
tm_defines=OBSD_OLD_GAS
tm_file="sparc/sparc.h openbsd.h sparc/openbsd.h"
# needed to unconfuse gdb
tmake_file="t-libc-ok t-openbsd sparc/t-openbsd"
# we need collect2 until our bug is fixed...
use_collect2=yes
;;
sparc64-*-openbsd*)
tm_file="sparc/openbsd1-64.h ${tm_file} dbxelf.h elfos.h svr4.h sparc/sysv4.h sparc/sp64-elf.h openbsd.h sparc/openbsd64.h"
extra_options="${extra_options} sparc/little-endian.opt"

View File

@ -177,9 +177,6 @@ case ${host} in
out_host_hook_obj="${out_host_hook_obj} host-i386-darwin.o"
host_xmake_file="${host_xmake_file} i386/x-darwin"
;;
i860-*-sysv4*)
host_xmake_file=i860/x-sysv4
;;
powerpc-*-beos*)
host_can_use_collect2=no
;;

View File

@ -1,53 +0,0 @@
/* Definitions of target machine for GNU compiler, for Intel 860.
Copyright (C) 2000, 2003, 2004 Free Software Foundation, Inc.
Hacked substantially by Ron Guilmette (rfg@monkeys.com) to cater to
the whims of the System V Release 4 assembler.
This file is part of GCC.
GCC 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.
GCC 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 GCC; see the file COPYING. If not, write to
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
/* Declare things which are defined in i860.c but called from
insn-output.c. */
#ifdef RTX_CODE
extern unsigned long sfmode_constant_to_ulong (rtx);
extern const char *output_load (rtx *);
extern const char *output_store (rtx *);
extern const char *output_move_double (rtx *);
extern const char *output_fp_move_double (rtx *);
extern const char *output_block_move (rtx *);
extern void output_load_address (rtx *);
extern int safe_insn_src_p (rtx, enum machine_mode);
extern int operand_clobbered_before_used_after (rtx, rtx);
extern int reg_or_0_operand (rtx, enum machine_mode);
extern int arith_operand (rtx, enum machine_mode);
extern int logic_operand (rtx, enum machine_mode);
extern int shift_operand (rtx, enum machine_mode);
extern int compare_operand (rtx, enum machine_mode);
extern int bte_operand (rtx, enum machine_mode);
extern int indexed_operand (rtx, enum machine_mode);
extern int load_operand (rtx, enum machine_mode);
extern int small_int (rtx, enum machine_mode);
extern int logic_int (rtx, enum machine_mode);
extern int call_insn_operand (rtx, enum machine_mode);
#ifdef TREE_CODE
extern void i860_va_start (tree, rtx);
#endif /* TREE_CODE */
#endif /* RTX_CODE */
extern void tdesc_section (void);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,32 +0,0 @@
; Options for the Intel i860 port of the compiler.
; Copyright (C) 2005 Free Software Foundation, Inc.
;
; This file is part of GCC.
;
; GCC 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.
;
; GCC 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 GCC; see the file COPYING. If not, write to the Free
; Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
; 02110-1301, USA.
mxp
Target Report RejectNegative Mask(XP)
Generate code which uses the FPU
mnoxp
Target Report RejectNegative InverseMask(XP)
Do not generate code which uses the FPU
mxr
Target Report RejectNegative InverseMask(XP)
Do not generate code which uses the FPU

View File

@ -1,155 +0,0 @@
/* Target definitions for GNU compiler for Intel 80860 running System V.4
Copyright (C) 1991, 1996, 2000, 2002, 2003 Free Software Foundation, Inc.
Contributed by Ron Guilmette (rfg@monkeys.com).
This file is part of GCC.
GCC 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.
GCC 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 GCC; see the file COPYING. If not, write to
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
#undef TARGET_VERSION
#define TARGET_VERSION fprintf (stderr, " (i860 System V Release 4)");
#undef USER_LABEL_PREFIX
#define USER_LABEL_PREFIX ""
/* Provide a set of pre-definitions and pre-assertions appropriate for
the i860 running svr4. Note that the symbol `__svr4__' MUST BE
DEFINED! It is needed so that the va_list struct in va-i860.h
will get correctly defined for the svr4 (ABI compliant) case rather
than for the previous (svr3, svr2, ...) case. It also needs to be
defined so that the correct (svr4) version of __builtin_saveregs
will be selected when we are building gnulib2.c.
__svr4__ is our extension. */
#define TARGET_OS_CPP_BUILTINS() \
do \
{ \
builtin_define_std ("unix"); \
builtin_define ("SVR4"); \
builtin_define ("__svr4__"); \
builtin_assert ("system=unix"); \
builtin_assert ("system=svr4"); \
} \
while (0)
/* For the benefit of i860_va_arg, flag it this way too. */
#define I860_SVR4_VA_LIST 1
/* The prefix to be used in assembler output for all names of registers.
This string gets prepended to all i860 register names (svr4 only). */
#define I860_REG_PREFIX "%"
#define ASM_COMMENT_START "#"
#undef TYPE_OPERAND_FMT
#define TYPE_OPERAND_FMT "\"%s\""
#define GLOBAL_ASM_OP ".globl "
/* The following macro definition overrides the one in i860.h
because the svr4 i860 assembler requires a different syntax
for getting parts of constant/relocatable values. */
#undef PRINT_OPERAND_PART
#define PRINT_OPERAND_PART(FILE, X, PART_CODE) \
do { fprintf (FILE, "["); \
output_address (X); \
fprintf (FILE, "]@%s", PART_CODE); \
} while (0)
#undef TARGET_ASM_FILE_START_FILE_DIRECTIVE
#define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
#undef TARGET_ASM_FILE_START
#define TARGET_ASM_FILE_START i860_file_start
/* Output the special word the svr4 SDB wants to see just before
the first word of each function's prologue code. */
extern const char *current_function_original_name;
/* This special macro is used to output a magic word just before the
first word of each function. On some versions of UNIX running on
the i860, this word can be any word that looks like a NOP, however
under svr4, this neds to be an `shr r0,r0,r0' instruction in which
the normally unused low-order bits contain the length of the function
prologue code (in bytes). This is needed to make the svr4 SDB debugger
happy. */
#undef ASM_OUTPUT_FUNCTION_PREFIX
#define ASM_OUTPUT_FUNCTION_PREFIX(FILE, FNNAME) \
do { ASM_OUTPUT_ALIGN (FILE, 2); \
fprintf ((FILE), "\t.long\t.ep."); \
assemble_name (FILE, FNNAME); \
fprintf (FILE, "-"); \
assemble_name (FILE, FNNAME); \
fprintf (FILE, "+0xc8000000\n"); \
current_function_original_name = (FNNAME); \
} while (0)
/* Output the special label that must go just after each function's
prologue code to support svr4 SDB. */
#define ASM_OUTPUT_PROLOGUE_SUFFIX(FILE) \
do { fprintf (FILE, ".ep."); \
assemble_name (FILE, current_function_original_name); \
fprintf (FILE, ":\n"); \
} while (0)
/* Define the pseudo-ops used to switch to the .ctors and .dtors sections.
Note that we want to give these sections the SHF_WRITE attribute
because these sections will actually contain data (i.e. tables of
addresses of functions in the current root executable or shared library
file) and, in the case of a shared library, the relocatable addresses
will have to be properly resolved/relocated (and then written into) by
the dynamic linker when it actually attaches the given shared library
to the executing process. (Note that on SVR4, you may wish to use the
`-z text' option to the ELF linker, when building a shared library, as
an additional check that you are doing everything right. But if you do
use the `-z text' option when building a shared library, you will get
errors unless the .ctors and .dtors sections are marked as writable
via the SHF_WRITE attribute.) */
#undef CTORS_SECTION_ASM_OP
#define CTORS_SECTION_ASM_OP "\t.section\t.ctors,\"aw\""
#undef DTORS_SECTION_ASM_OP
#define DTORS_SECTION_ASM_OP "\t.section\t.dtors,\"aw\""
/* Add definitions to support the .tdesc section as specified in the svr4
ABI for the i860. */
#define TDESC_SECTION_ASM_OP "\t.section\t.tdesc"
#undef EXTRA_SECTIONS
#define EXTRA_SECTIONS in_tdesc
#undef EXTRA_SECTION_FUNCTIONS
#define EXTRA_SECTION_FUNCTIONS \
TDESC_SECTION_FUNCTION
#define TDESC_SECTION_FUNCTION \
void \
tdesc_section () \
{ \
if (in_section != in_tdesc) \
{ \
fprintf (asm_out_file, "%s\n", TDESC_SECTION_ASM_OP); \
in_section = in_tdesc; \
} \
}

View File

@ -1,5 +0,0 @@
LIB2FUNCS_EXTRA = varargs.asm
varargs.asm: $(srcdir)/config/i860/varargs.asm
cp $(srcdir)/config/i860/varargs.asm .

View File

@ -1,212 +0,0 @@
/* Special varargs support for i860.
Copyright (C) 2001, 2003 Free Software Foundation, Inc.
This file is part of GCC.
GCC 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.
In addition to the permissions in the GNU General Public License, the
Free Software Foundation gives you unlimited permission to link the
compiled version of this file into combinations with other programs,
and to distribute those combinations without any restriction coming
from the use of this file. (The General Public License restrictions
do apply in other respects; for example, they cover modification of
the file, and distribution when not linked into a combine
executable.)
GCC 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 GCC; see the file COPYING. If not, write to
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
#if defined(__svr4__) || defined(__alliant__)
.text
.align 4
/* The Alliant needs the added underscore. */
.globl __builtin_saveregs
__builtin_saveregs:
.globl ___builtin_saveregs
___builtin_saveregs:
andnot 0x0f,%sp,%sp /* round down to 16-byte boundary */
#if 0
adds -96,%sp,%sp /* allocate stack space for reg save
area and also for a new va_list
structure */
#else
adds -80,%sp,%sp /* allocate stack space for reg save area */
#endif
/* Save all argument registers in the arg reg save area. The
arg reg save area must have the following layout (according
to the svr4 ABI):
struct {
union {
float freg[8];
double dreg[4];
} float_regs;
long ireg[12];
};
*/
fst.q %f8, 0(%sp) /* save floating regs (f8-f15) */
fst.q %f12,16(%sp)
st.l %r16,32(%sp) /* save integer regs (r16-r27) */
st.l %r17,36(%sp)
st.l %r18,40(%sp)
st.l %r19,44(%sp)
st.l %r20,48(%sp)
st.l %r21,52(%sp)
st.l %r22,56(%sp)
st.l %r23,60(%sp)
st.l %r24,64(%sp)
st.l %r25,68(%sp)
st.l %r26,72(%sp)
st.l %r27,76(%sp)
#if 0
adds 80,%sp,%r16 /* compute the address of the new
va_list structure. Put in into
r16 so that it will be returned
to the caller. */
#endif
/* Initialize all fields of the new va_list structure. This
structure looks like:
typedef struct {
unsigned long ireg_used;
unsigned long freg_used;
long *reg_base;
long *mem_ptr;
} va_list;
*/
#if 0
st.l %r0, 0(%r16) /* nfixed */
st.l %r0, 4(%r16) /* nfloating */
st.l %sp, 8(%r16) /* __va_ctl points to __va_struct. */
bri %r1 /* delayed return */
st.l %r28,12(%r16) /* pointer to overflow args */
#else
bri %r1 /* delayed return */
or %sp,%r0,%r16 /* Return the address of the reg save area. */
#endif
#else /* not __svr4__ */
#if defined(__PARAGON__)
/*
* we'll use SVR4-ish varargs but need SVR3.2 assembler syntax,
* and we stand a better chance of hooking into libraries
* compiled by PGI. [andyp@ssd.intel.com]
*/
.text
.align 4
.globl __builtin_saveregs
__builtin_saveregs:
.globl ___builtin_saveregs
___builtin_saveregs:
andnot 0x0f,sp,sp /* round down to 16-byte boundary */
adds -96,sp,sp /* allocate stack space for reg save
area and also for a new va_list
structure */
/* Save all argument registers in the arg reg save area. The
arg reg save area must have the following layout (according
to the svr4 ABI):
struct {
union {
float freg[8];
double dreg[4];
} float_regs;
long ireg[12];
};
*/
fst.q f8, 0(sp)
fst.q f12,16(sp)
st.l r16,32(sp)
st.l r17,36(sp)
st.l r18,40(sp)
st.l r19,44(sp)
st.l r20,48(sp)
st.l r21,52(sp)
st.l r22,56(sp)
st.l r23,60(sp)
st.l r24,64(sp)
st.l r25,68(sp)
st.l r26,72(sp)
st.l r27,76(sp)
adds 80,sp,r16 /* compute the address of the new
va_list structure. Put in into
r16 so that it will be returned
to the caller. */
/* Initialize all fields of the new va_list structure. This
structure looks like:
typedef struct {
unsigned long ireg_used;
unsigned long freg_used;
long *reg_base;
long *mem_ptr;
} va_list;
*/
st.l r0, 0(r16) /* nfixed */
st.l r0, 4(r16) /* nfloating */
st.l sp, 8(r16) /* __va_ctl points to __va_struct. */
bri r1 /* delayed return */
st.l r28,12(r16) /* pointer to overflow args */
#else /* not __PARAGON__ */
.text
.align 4
.globl ___builtin_saveregs
___builtin_saveregs:
mov sp,r30
andnot 0x0f,sp,sp
adds -96,sp,sp /* allocate sufficient space on the stack */
/* Fill in the __va_struct. */
st.l r16, 0(sp) /* save integer regs (r16-r27) */
st.l r17, 4(sp) /* int fixed[12] */
st.l r18, 8(sp)
st.l r19,12(sp)
st.l r20,16(sp)
st.l r21,20(sp)
st.l r22,24(sp)
st.l r23,28(sp)
st.l r24,32(sp)
st.l r25,36(sp)
st.l r26,40(sp)
st.l r27,44(sp)
fst.q f8, 48(sp) /* save floating regs (f8-f15) */
fst.q f12,64(sp) /* int floating[8] */
/* Fill in the __va_ctl. */
st.l sp, 80(sp) /* __va_ctl points to __va_struct. */
st.l r28,84(sp) /* pointer to more args */
st.l r0, 88(sp) /* nfixed */
st.l r0, 92(sp) /* nfloating */
adds 80,sp,r16 /* return address of the __va_ctl. */
bri r1
mov r30,sp
/* recover stack and pass address to start
of data. */
#endif /* not __PARAGON__ */
#endif /* not __svr4__ */

View File

@ -1,44 +0,0 @@
# The svr4 reference port for the i860 contains an alloca.o routine
# in /usr/ucblib/libucb.a, but we can't just try to get that by
# setting CLIB to /usr/ucblib/libucb.a because (unfortunately)
# there are a lot of other routines in libucb.a which are supposed
# to be the Berkeley versions of library routines normally found in
# libc.a and many of these Berkeley versions are badly broken. Thus,
# if we try to link programs with libucb.a before libc.a, those
# programs tend to crash.
# Also, the alloca() routine supplied in early version of svr4 for
# the i860 is non-ABI compliant. It doesn't keep the stack aligned
# to a 16-byte boundary as the ABI requires.
# More importantly however, even a fully ABI compliant alloca() routine
# would fail to work correctly with some versions of the native svr4 C
# compiler currently being distributed for the i860 (as of 1/29/92).
# The problem is that the native C compiler generates non-ABI-compliant
# function epilogues which cut back the stack (upon function exit) in
# an incorrect manner. Specifically, they cut back the stack by adding
# the nominal *static* frame size (determined statically at compile-time)
# to the stack pointer rather than setting the stack pointer based upon
# the current value of the frame pointer (as called for in the i860 ABI).
# This can cause serious trouble in cases where you repeatedly call a
# routine which itself calls alloca(). In such cases, the stack will
# grow continuously until you finally run out of swap space or exceed
# the system's process size limit. To avoid this problem (which can
# arise when a stage1 gcc is being used to build a stage2 gcc) you
# *must* link in the C language version of alloca() which is supplied
# with gcc to your stage1 version of gcc. The following definition
# forces that to happen.
ALLOCA=alloca.o
# We build all stages *without* shared libraries because that may make
# debugging the compiler easier (until there is a GDB which supports
# both Dwarf *and* svr4 shared libraries).
# Note that the native C compiler for the svr4 reference port on the
# i860 recognizes a special -gg option. Using that option causes *full*
# Dwarf debugging information to be generated, whereas using only -g
# causes only limited Dwarf debugging information to be generated.
# (This is an undocumented feature of the native svr4 C compiler.)
CCLIBFLAGS=-Bstatic -dn -gg

View File

@ -1,53 +0,0 @@
;
; Copyright (C) 2000, 2001 Free Software Foundation, Inc.
; Contributed by Red Hat, Inc.
;
; This file is part of GCC.
;
; GCC 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.
;
; In addition to the permissions in the GNU General Public License, the
; Free Software Foundation gives you unlimited permission to link the
; compiled version of this file with other programs, and to distribute
; those programs without any restriction coming from the use of this
; file. (The General Public License restrictions do apply in other
; respects; for example, they cover modification of the file, and
; distribution when not linked into another program.)
;
; GCC 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 GCC; see the file COPYING. If not, write to
; the Free Software Foundation, 51 Franklin Street, Fifth Floor,
; Boston, MA 02110-1301, USA.
;
.file "crt0.S"
.text
.global __start
.func __start
__start:
clr $ff ; Insure we have a zero available
mov w,#%hi8data(__stack) ; set up stack
mov sph,w ;
mov w,#%lo8data(__stack)
mov spl,w
push #0 ; Set argc/argv.
push #0 ; Only required for testing
push #0 ; purposes and "ansi" main.
push #0
page _main
call _main
push $81 ; use return value to call exit()
push $80
page _exit
call _exit
break ; Should never return
.endfunc

View File

@ -1,83 +0,0 @@
/* Copyright (C) 2000, 2001, 2002 Free Software Foundation, Inc.
Contributed by Red Hat, Inc and Ubicom, Inc.
This file is part of GCC.
GCC 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.
GCC 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 GCC; see the file COPYING. If not, write to
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
extern void function_prologue (FILE *, HOST_WIDE_INT);
extern void function_epilogue (FILE *, HOST_WIDE_INT);
extern int find_one_set_bit_p (HOST_WIDE_INT);
extern int find_one_clear_bit_p (HOST_WIDE_INT);
#ifdef TREE_CODE
extern void unique_section (tree, int);
extern int valid_machine_type_attribute (tree, tree, tree, tree);
extern int valid_machine_decl_attribute (tree, tree, tree, tree);
extern int ip2k_return_pops_args (tree, tree, int);
#endif /* TREE_CODE */
#ifdef RTX_CODE
extern int legitimate_address_p (enum machine_mode, rtx, int);
extern int ip2k_extra_constraint (rtx, int);
extern rtx legitimize_address (rtx, rtx, enum machine_mode, rtx);
extern int adjust_insn_length (rtx insn, int len);
extern void asm_output_char (FILE *, rtx);
extern void asm_output_short (FILE *, rtx);
extern void asm_output_byte (FILE *, int);
extern void print_operand (FILE *, rtx, int);
extern void print_operand_address (FILE *, rtx);
extern int ip2k_jump_mode (rtx, rtx);
extern void ip2k_split_words (enum machine_mode, enum machine_mode, rtx *);
extern rtx ip2k_get_low_half (rtx, enum machine_mode);
extern rtx ip2k_get_high_half (rtx, enum machine_mode);
extern int ip2k_nonptr_operand (rtx, enum machine_mode);
extern int ip2k_ptr_operand (rtx, enum machine_mode);
extern int ip2k_ip_operand (rtx, enum machine_mode);
extern int ip2k_short_operand (rtx, enum machine_mode);
extern int ip2k_gen_operand (rtx, enum machine_mode);
extern int ip2k_nonsp_reg_operand (rtx, enum machine_mode);
extern int ip2k_symbol_ref_operand (rtx, enum machine_mode);
extern const char *ip2k_set_compare (rtx, rtx);
extern const char *ip2k_gen_sCOND (rtx, enum rtx_code, rtx);
extern const char *ip2k_gen_signed_comp_branch (rtx, enum rtx_code, rtx);
extern const char *ip2k_gen_unsigned_comp_branch (rtx, enum rtx_code, rtx);
extern int is_regfile_address (rtx);
extern int ip2k_mode_dependent_address (rtx);
extern int ip2k_address_uses_reg_p (rtx, unsigned int);
extern int ip2k_xexp_not_uses_reg_p (rtx, unsigned int, int);
extern int ip2k_composite_xexp_not_uses_reg_p (rtx, unsigned int, int);
extern int ip2k_composite_xexp_not_uses_cc0_p (rtx);
extern int ip2k_signed_comparison_operator (rtx, enum machine_mode);
extern int ip2k_unsigned_comparison_operator (rtx, enum machine_mode);
extern int ip2k_unary_operator (rtx, enum machine_mode);
extern int ip2k_binary_operator (rtx, enum machine_mode);
extern rtx ip2k_compare_operands[3];
#endif /* RTX_CODE */
#ifdef HAVE_MACHINE_MODES
extern int class_max_nregs (enum reg_class, enum machine_mode);
extern enum reg_class class_likely_spilled_p (int c);
#endif /* HAVE_MACHINE_MODES */
#ifdef REAL_VALUE_TYPE
extern void asm_output_float (FILE *, REAL_VALUE_TYPE);
#endif
extern int ip2k_init_elim_offset (int, int);
extern void ip2k_init_local_alloc (int *);

File diff suppressed because it is too large Load Diff

View File

@ -1,851 +0,0 @@
/* Definitions of target machine for GCC,
For Ubicom IP2022 Communications Controller
Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
Contributed by Red Hat, Inc and Ubicom, Inc.
This file is part of GCC.
GCC 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.
GCC 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 GCC; see the file COPYING. If not, write to
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
#undef ASM_SPEC /* We have a GAS assembler. */
#define TARGET_CPU_CPP_BUILTINS() \
do \
{ \
builtin_define_std ("IP2K"); \
builtin_define ("_DOUBLE_IS_32BITS"); \
builtin_define ("_BUFSIZ=512"); \
builtin_define ("__FILENAME_MAX__=128"); \
} \
while (0)
#define TARGET_VERSION fprintf (stderr, " (ip2k, GNU assembler syntax)")
/* Caller-saves is not a win for the IP2K. Pretty much anywhere that
a register is permitted allows SP-relative addresses too.
This machine doesn't have PIC addressing modes, so disable that also. */
#define OVERRIDE_OPTIONS \
do { \
flag_caller_saves = 0; \
flag_pic = 0; \
} while (0)
/* Put each function in its own section so that PAGE-instruction
relaxation can do its best. */
#define OPTIMIZATION_OPTIONS(LEVEL, SIZEFLAG) \
do { \
if ((LEVEL) || (SIZEFLAG)) \
flag_function_sections = 1; \
} while (0)
#define BITS_BIG_ENDIAN 0
#define BYTES_BIG_ENDIAN 1
#define WORDS_BIG_ENDIAN 1
#define BITS_PER_WORD 8
#define UNITS_PER_WORD (BITS_PER_WORD / BITS_PER_UNIT)
/* Width in bits of a pointer.
See also the macro `Pmode' defined below. */
#define POINTER_SIZE 16
/* Maximum sized of reasonable data type DImode or Dfmode ... */
#define MAX_FIXED_MODE_SIZE 64
#define PARM_BOUNDARY 8
#define FUNCTION_BOUNDARY 16
#define EMPTY_FIELD_BOUNDARY 8
#define BIGGEST_ALIGNMENT 8
#define STRICT_ALIGNMENT 0
#define PCC_BITFIELD_TYPE_MATTERS 1
#undef INT_TYPE_SIZE
#define INT_TYPE_SIZE 16
#undef SHORT_TYPE_SIZE
#define SHORT_TYPE_SIZE 16
#undef LONG_TYPE_SIZE
#define LONG_TYPE_SIZE 32
#undef LONG_LONG_TYPE_SIZE
#define LONG_LONG_TYPE_SIZE 64
#undef CHAR_TYPE_SIZE
#define CHAR_TYPE_SIZE 8
#undef FLOAT_TYPE_SIZE
#define FLOAT_TYPE_SIZE 32
#undef DOUBLE_TYPE_SIZE
#define DOUBLE_TYPE_SIZE 32
#undef LONG_DOUBLE_TYPE_SIZE
#define LONG_DOUBLE_TYPE_SIZE 32
#define DEFAULT_SIGNED_CHAR 1
#define SIZE_TYPE "unsigned int"
#define PTRDIFF_TYPE "int"
#undef WCHAR_TYPE
#define WCHAR_TYPE "int"
#undef WCHAR_TYPE_SIZE
#define WCHAR_TYPE_SIZE 16
#define HARD_REG_SIZE (UNITS_PER_WORD)
/* Standard register usage.
for the IP2K, we are going to have a LOT of registers, but only some of them
are named. */
#define FIRST_PSEUDO_REGISTER (0x104) /* Skip over physical regs, VFP, AP. */
#define REG_IP 0x4
#define REG_IPH REG_IP
#define REG_IPL 0x5
#define REG_SP 0x6
#define REG_SPH REG_SP
#define REG_SPL 0x7
#define REG_PCH 0x8
#define REG_PCL 0x9
#define REG_W 0xa
#define REG_STATUS 0xb
#define REG_DP 0xc
#define REG_DPH REG_DP
#define REG_DPL 0xd
#define REG_MULH 0xf
#define REG_CALLH 0x7e /* Call-stack readout. */
#define REG_CALLL 0x7f
#define REG_RESULT 0x80 /* Result register (upto 8 bytes). */
#define REG_FP 0xfd /* 2 bytes for FRAME chain */
#define REG_ZERO 0xff /* Initialized to zero by runtime. */
#define REG_VFP 0x100 /* Virtual frame pointer. */
#define REG_AP 0x102 /* Virtual arg pointer. */
/* Status register bits. */
#define Z_FLAG 0x2
#define DC_FLAG 0x1
#define C_FLAG 0x0
#define FIXED_REGISTERS {\
1,1,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,/* r0.. r31*/\
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,/* r32.. r63*/\
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,/* r64.. r95*/\
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,/* r96..r127*/\
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,/*r128..r159*/\
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,/*r160..r191*/\
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,/*r192..r223*/\
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,/*r224..r255*/\
1,1,1,1}
#define CALL_USED_REGISTERS { \
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,/* r0.. r31*/\
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,/* r32.. r63*/\
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,/* r64.. r95*/\
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,/* r96..r127*/\
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,/*r128..r159*/\
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,/*r160..r191*/\
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,/*r192..r223*/\
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,/*r224..r255*/\
1,1,1,1}
#define REG_ALLOC_ORDER { \
0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f, \
0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97, \
0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f, \
0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87, \
0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7, \
0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf, \
0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7, \
0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf, \
0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7, \
0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf, \
0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7, \
0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf, \
0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7, \
0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef, \
0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7, \
0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff, \
0x00,0x01,0x02,0x03,0x0c,0x0d,0x06,0x07, \
0x08,0x09,0x0a,0x0b,0x04,0x05,0x0e,0x0f, \
0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17, \
0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f, \
0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27, \
0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f, \
0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37, \
0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f, \
0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47, \
0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f, \
0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57, \
0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f, \
0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67, \
0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f, \
0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77, \
0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f, \
0x100,0x101,0x102,0x103}
#define ORDER_REGS_FOR_LOCAL_ALLOC ip2k_init_local_alloc (reg_alloc_order)
/* Are we allowed to rename registers? For some reason, regrename was
changing DP to IP (when it appeared in addresses like (plus:HI
(reg: DP) (const_int 37)) - and that's bad because IP doesn't
permit offsets! */
#define HARD_REGNO_RENAME_OK(REG, NREG) \
(((REG) == REG_DPH) ? 0 \
: ((REG) == REG_IPH) ? ((NREG) == REG_DPH) \
: (((NREG) == REG_IPL) || ((NREG) == REG_DPL)) ? 0 : 1)
#define HARD_REGNO_NREGS(REGNO, MODE) \
((GET_MODE_SIZE (MODE) + UNITS_PER_WORD - 1) / UNITS_PER_WORD)
#define HARD_REGNO_MODE_OK(REGNO, MODE) 1
#define MODES_TIEABLE_P(MODE1, MODE2) \
(((MODE1) == QImode && (MODE2) == HImode) \
|| ((MODE2) == QImode && (MODE1) == HImode))
/* We originally had this as follows - this isn't a win on the IP2k
though as registers just get in our way!
#define MODES_TIEABLE_P(MODE1, MODE2) \
(((MODE1) > HImode && (MODE2) == HImode)
|| ((MODE1) == HImode && (MODE2) > HImode)) */
enum reg_class {
NO_REGS,
DPH_REGS,
DPL_REGS,
DP_REGS,
SP_REGS,
IPH_REGS,
IPL_REGS,
IP_REGS,
DP_SP_REGS,
PTR_REGS,
NONPTR_REGS,
NONSP_REGS,
GENERAL_REGS,
ALL_REGS = GENERAL_REGS,
LIM_REG_CLASSES
};
#define N_REG_CLASSES (int)LIM_REG_CLASSES
#define REG_CLASS_NAMES { \
"NO_REGS", \
"DPH_REGS", \
"DPL_REGS", \
"DP_REGS", \
"SP_REGS", \
"IPH_REGS", \
"IPL_REGS", \
"IP_REGS", \
"DP_SP_REGS", \
"PTR_REGS", \
"NONPTR_REGS", \
"NONSP_REGS", \
"GENERAL_REGS" \
}
#define REG_CLASS_CONTENTS { \
{0x00000000, 0, 0, 0, 0, 0, 0, 0, 0}, /* NO_REGS */ \
{0x00001000, 0, 0, 0, 0, 0, 0, 0, 0}, /* DPH_REGS */ \
{0x00002000, 0, 0, 0, 0, 0, 0, 0, 0}, /* DPL_REGS */ \
{0x00003000, 0, 0, 0, 0, 0, 0, 0, 0}, /* DP_REGS */ \
{0x000000c0, 0, 0, 0, 0, 0, 0, 0, 0}, /* SP_REGS */ \
{0x00000010, 0, 0, 0, 0, 0, 0, 0, 0}, /* IPH_REGS */ \
{0x00000020, 0, 0, 0, 0, 0, 0, 0, 0}, /* IPL_REGS */ \
{0x00000030, 0, 0, 0, 0, 0, 0, 0, 0}, /* IP_REGS */ \
{0x000030c0, 0, 0, 0, 0, 0, 0, 0, 0}, /* DP_SP_REGS */ \
{0x000030f0, 0, 0, 0, 0, 0, 0, 0, 0}, /* PTR_REGS */ \
{0xffffcf0f,-1,-1,-1,-1,-1,-1,-1, 0}, /* NONPTR_REGS */ \
{0xffffff3f,-1,-1,-1,-1,-1,-1,-1, 0}, /* NONSP_REGS */ \
{0xffffffff,-1,-1,-1,-1,-1,-1,-1,15} /* GENERAL_REGS */ \
}
#define REGNO_REG_CLASS(R) \
( (R) == REG_IPH ? IPH_REGS \
: (R) == REG_IPL ? IPL_REGS \
: (R) == REG_DPH ? DPH_REGS \
: (R) == REG_DPL ? DPL_REGS \
: (R) == REG_SPH ? SP_REGS \
: (R) == REG_SPL ? SP_REGS \
: NONPTR_REGS)
#define MODE_BASE_REG_CLASS(MODE) ((MODE) == QImode ? PTR_REGS : DP_SP_REGS)
#define BASE_REG_CLASS PTR_REGS
#define INDEX_REG_CLASS NO_REGS
#define REG_CLASS_FROM_LETTER(C) \
( (C) == 'j' ? IPH_REGS \
: (C) == 'k' ? IPL_REGS \
: (C) == 'f' ? IP_REGS \
: (C) == 'y' ? DPH_REGS \
: (C) == 'z' ? DPL_REGS \
: (C) == 'b' ? DP_REGS \
: (C) == 'u' ? NONSP_REGS \
: (C) == 'q' ? SP_REGS \
: (C) == 'c' ? DP_SP_REGS \
: (C) == 'a' ? PTR_REGS \
: (C) == 'd' ? NONPTR_REGS \
: NO_REGS)
#define REGNO_OK_FOR_BASE_P(R) \
((R) == REG_DP || (R) == REG_IP || (R) == REG_SP)
#define REGNO_MODE_OK_FOR_BASE_P(R,M) \
((R) == REG_DP || (R) == REG_SP \
|| ((R) == REG_IP && GET_MODE_SIZE (M) <= 1))
#define REGNO_OK_FOR_INDEX_P(NUM) 0
#define PREFERRED_RELOAD_CLASS(X, CLASS) (CLASS)
#define SMALL_REGISTER_CLASSES 1
#define CLASS_LIKELY_SPILLED_P(CLASS) class_likely_spilled_p(CLASS)
#define CLASS_MAX_NREGS(CLASS, MODE) GET_MODE_SIZE (MODE)
#define CONST_OK_FOR_LETTER_P(VALUE, C) \
((C) == 'I' ? (VALUE) >= -255 && (VALUE) <= -1 : \
(C) == 'J' ? (VALUE) >= 0 && (VALUE) <= 7 : \
(C) == 'K' ? (VALUE) >= 0 && (VALUE) <= 127 : \
(C) == 'L' ? (VALUE) > 0 && (VALUE) < 128: \
(C) == 'M' ? (VALUE) == -1: \
(C) == 'N' ? (VALUE) == 1: \
(C) == 'O' ? (VALUE) == 0: \
(C) == 'P' ? (VALUE) >= 0 && (VALUE) <= 255: \
0)
#define CONST_DOUBLE_OK_FOR_LETTER_P(VALUE, C) 0
#define EXTRA_CONSTRAINT(X, C) ip2k_extra_constraint (X, C)
/* This is an undocumented variable which describes
how GCC will pop a data. */
#define STACK_POP_CODE PRE_INC
#define STACK_PUSH_CODE POST_DEC
#define STACK_CHECK_BUILTIN 1
/* Prologue code will do stack checking as necessary. */
#define STARTING_FRAME_OFFSET (0)
#define FRAME_GROWS_DOWNWARD 1
#define STACK_GROWS_DOWNWARD 1
/* On IP2K arg pointer is virtual and resolves to either SP or FP
after we've resolved what registers are saved (fp chain, return
pc, etc. */
#define FIRST_PARM_OFFSET(FUNDECL) 0
#define STACK_POINTER_OFFSET 1
/* IP2K stack is post-decremented, so 0(sp) is address of open space
and 1(sp) is offset to the location avobe the forst location at which
outgoing arguments are placed. */
#define STACK_BOUNDARY 8
#define STACK_POINTER_REGNUM REG_SP
#define FRAME_POINTER_REGNUM REG_VFP
#define HARD_FRAME_POINTER_REGNUM REG_FP
#define ARG_POINTER_REGNUM REG_AP
/* We don't really want to support nested functions. But we'll crash
in various testsuite tests if we don't at least define the register
to contain the static chain. The return value register is about as
bad a place as any for this. */
#define STATIC_CHAIN_REGNUM REG_RESULT
#define FRAME_POINTER_REQUIRED (!flag_omit_frame_pointer)
#define ELIMINABLE_REGS { \
{ARG_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
{ARG_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}, \
{FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
{FRAME_POINTER_REGNUM, HARD_FRAME_POINTER_REGNUM}, \
{HARD_FRAME_POINTER_REGNUM, STACK_POINTER_REGNUM}, \
}
#define CAN_ELIMINATE(FROM, TO) \
((FROM) == HARD_FRAME_POINTER_REGNUM \
? (flag_omit_frame_pointer && !frame_pointer_needed) : 1)
/* Don't eliminate FP unless we EXPLICITLY_ASKED */
#define INITIAL_ELIMINATION_OFFSET(FROM, TO, OFFSET) \
((OFFSET) = ip2k_init_elim_offset ((FROM), (TO)))
#define RETURN_ADDR_RTX(COUNT, X) \
(((COUNT) == 0) ? gen_rtx_REG (HImode, REG_CALLH) : NULL_RTX)
#define PUSH_ROUNDING(NPUSHED) (NPUSHED)
#define RETURN_POPS_ARGS(FUNDECL,FUNTYPE,SIZE) \
ip2k_return_pops_args ((FUNDECL), (FUNTYPE), (SIZE))
#define FUNCTION_ARG(CUM, MODE, TYPE, NAMED) 0
#define CUMULATIVE_ARGS int
#define INIT_CUMULATIVE_ARGS(CUM, FNTYPE, LIBNAME, INDIRECT, N_NAMED_ARGS) \
((CUM) = 0)
#define FUNCTION_ARG_ADVANCE(CUM, MODE, TYPE, NAMED)
/* All arguments are passed on stack - do nothing here. */
#define FUNCTION_ARG_REGNO_P(R) 0
#define FUNCTION_VALUE(VALTYPE, FUNC) \
((TYPE_MODE (VALTYPE) == QImode) \
? gen_rtx_REG (TYPE_MODE (VALTYPE), REG_RESULT + 1) \
: gen_rtx_REG (TYPE_MODE (VALTYPE), REG_RESULT))
/* Because functions returning 'char' actually widen to 'int', we have to
use $81 as the return location if we think we only have a 'char'. */
#define LIBCALL_VALUE(MODE) gen_rtx_REG ((MODE), REG_RESULT)
#define FUNCTION_VALUE_REGNO_P(N) ((N) == REG_RESULT)
#define DEFAULT_PCC_STRUCT_RETURN 0
#define EPILOGUE_USES(REGNO) 0
/* Hmmm. We don't actually like constants as addresses - they always need
to be loaded to a register, except for function calls which take an
address by immediate value. But changing this to zero had negative
effects, causing the compiler to get very confused.... */
#define CONSTANT_ADDRESS_P(X) CONSTANT_P (X)
#define MAX_REGS_PER_ADDRESS 1
#ifdef REG_OK_STRICT
# define GO_IF_LEGITIMATE_ADDRESS(MODE, OPERAND, ADDR) \
{ \
if (legitimate_address_p ((MODE), (OPERAND), 1)) \
goto ADDR; \
}
#else
# define GO_IF_LEGITIMATE_ADDRESS(MODE, OPERAND, ADDR) \
{ \
if (legitimate_address_p ((MODE), (OPERAND), 0)) \
goto ADDR; \
}
#endif
#define REG_OK_FOR_BASE_STRICT_P(X) REGNO_OK_FOR_BASE_P (REGNO (X))
#define REG_OK_FOR_BASE_NOSTRICT_P(X) \
(REGNO (X) >= FIRST_PSEUDO_REGISTER \
|| (REGNO (X) == REG_FP) \
|| (REGNO (X) == REG_VFP) \
|| (REGNO (X) == REG_AP) \
|| REG_OK_FOR_BASE_STRICT_P(X))
#ifdef REG_OK_STRICT
# define REG_OK_FOR_BASE_P(X) REG_OK_FOR_BASE_STRICT_P (X)
#else
# define REG_OK_FOR_BASE_P(X) REG_OK_FOR_BASE_NOSTRICT_P (X)
#endif
#define REG_OK_FOR_INDEX_P(X) 0
#define LEGITIMIZE_ADDRESS(X,OLDX,MODE,WIN) \
do { rtx orig_x = (X); \
(X) = legitimize_address ((X), (OLDX), (MODE), 0); \
if ((X) != orig_x && memory_address_p ((MODE), (X))) \
goto WIN; \
} while (0)
/* Is X a legitimate register to reload, or is it a pseudo stack-temp
that is problematic for push_reload() ? */
#define LRA_REG(X) \
(! (reg_equiv_memory_loc[REGNO (X)] \
&& (reg_equiv_address[REGNO (X)] \
|| num_not_at_initial_offset)))
/* Given a register X that failed the LRA_REG test, replace X
by its memory equivalent, find the reloads needed for THAT memory
location and substitute that back for the higher-level reload
that we're conducting... */
/* WARNING: we reference 'ind_levels' and 'insn' which are local variables
in find_reloads_address (), where the LEGITIMIZE_RELOAD_ADDRESS macro
expands. */
#define FRA_REG(X,MODE,OPNUM,TYPE) \
do { \
rtx tem = make_memloc ((X), REGNO (X)); \
\
if (! strict_memory_address_p (GET_MODE (tem), XEXP (tem, 0))) \
{ \
/* Note that we're doing address in address - cf. ADDR_TYPE */ \
find_reloads_address (GET_MODE (tem), &tem, XEXP (tem, 0), \
&XEXP (tem, 0), (OPNUM), \
ADDR_TYPE (TYPE), ind_levels, insn); \
} \
(X) = tem; \
} while (0)
/* For the IP2K, we want to be clever about picking IP vs DP for a
base pointer since IP only directly supports a zero displacement.
(Note that we have modified all the HI patterns to correctly handle
IP references by manipulating iph:ipl as we fetch the pieces). */
#define LEGITIMIZE_RELOAD_ADDRESS(X,MODE,OPNUM,TYPE,IND,WIN) \
{ \
if (GET_CODE (X) == PLUS \
&& REG_P (XEXP (X, 0)) \
&& GET_CODE (XEXP (X, 1)) == CONST_INT) \
{ \
int disp = INTVAL (XEXP (X, 1)); \
int fit = (disp >= 0 && disp <= (127 - 2 * GET_MODE_SIZE (MODE))); \
rtx reg = XEXP (X, 0); \
if (!fit) \
{ \
push_reload ((X), NULL_RTX, &(X), \
NULL, MODE_BASE_REG_CLASS (MODE), GET_MODE (X), \
VOIDmode, 0, 0, OPNUM, TYPE); \
goto WIN; \
} \
if (reg_equiv_memory_loc[REGNO (reg)] \
&& (reg_equiv_address[REGNO (reg)] || num_not_at_initial_offset)) \
{ \
rtx mem = make_memloc (reg, REGNO (reg)); \
if (! strict_memory_address_p (GET_MODE (mem), XEXP (mem, 0))) \
{ \
/* Note that we're doing address in address - cf. ADDR_TYPE */\
find_reloads_address (GET_MODE (mem), &mem, XEXP (mem, 0), \
&XEXP (mem, 0), (OPNUM), \
ADDR_TYPE (TYPE), (IND), insn); \
} \
push_reload (mem, NULL, &XEXP (X, 0), NULL, \
GENERAL_REGS, Pmode, VOIDmode, 0, 0, \
OPNUM, TYPE); \
push_reload (X, NULL, &X, NULL, \
MODE_BASE_REG_CLASS (MODE), GET_MODE (X), VOIDmode, \
0, 0, OPNUM, TYPE); \
goto WIN; \
} \
} \
}
#define GO_IF_MODE_DEPENDENT_ADDRESS(ADDR,LABEL) \
do { \
if (ip2k_mode_dependent_address (ADDR)) goto LABEL; \
} while (0)
#define LEGITIMATE_CONSTANT_P(X) 1
#define REGISTER_MOVE_COST(MODE, CLASS1, CLASS2) 7
#define MEMORY_MOVE_COST(MODE,CLASS,IN) 6
#define SLOW_BYTE_ACCESS 0
#define NO_FUNCTION_CSE
#define TEXT_SECTION_ASM_OP ".text"
#define DATA_SECTION_ASM_OP ".data"
#define JUMP_TABLES_IN_TEXT_SECTION 1
#define ASM_COMMENT_START " ; "
#define ASM_APP_ON "/* #APP */\n"
#define ASM_APP_OFF "/* #NOAPP */\n"
#define ASM_OUTPUT_DOUBLE(STREAM, VALUE) \
fprintf ((STREAM), ".double %.20e\n", (VALUE))
#define ASM_OUTPUT_FLOAT(STREAM, VALUE) \
asm_output_float ((STREAM), (VALUE))
#define ASM_OUTPUT_INT(FILE, VALUE) \
( fprintf ((FILE), "\t.long "), \
output_addr_const ((FILE), (VALUE)), \
fputs ("\n", (FILE)))
#define ASM_OUTPUT_SHORT(FILE,VALUE) \
asm_output_short ((FILE), (VALUE))
#define ASM_OUTPUT_CHAR(FILE,VALUE) \
asm_output_char ((FILE), (VALUE))
#define ASM_OUTPUT_BYTE(FILE,VALUE) \
asm_output_byte ((FILE), (VALUE))
#define IS_ASM_LOGICAL_LINE_SEPARATOR(C) \
((C) == '\n' || ((C) == '$'))
#define ASM_OUTPUT_COMMON(STREAM, NAME, SIZE, ROUNDED) \
do { \
fputs ("\t.comm ", (STREAM)); \
assemble_name ((STREAM), (NAME)); \
fprintf ((STREAM), ",%d\n", (int)(SIZE)); \
} while (0)
#define ASM_OUTPUT_LOCAL(STREAM, NAME, SIZE, ROUNDED) \
do { \
fputs ("\t.lcomm ", (STREAM)); \
assemble_name ((STREAM), (NAME)); \
fprintf ((STREAM), ",%d\n", (int)(SIZE)); \
} while (0)
#undef WEAK_ASM_OP
#define WEAK_ASM_OP ".weak"
#undef ASM_DECLARE_FUNCTION_SIZE
#define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \
do { \
if (!flag_inhibit_size_directive) \
ASM_OUTPUT_MEASURED_SIZE (FILE, FNAME); \
} while (0)
#define ESCAPES \
"\1\1\1\1\1\1\1\1btn\1fr\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
\0\0\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\\0\0\0\
\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\
\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1"
/* A table of bytes codes used by the ASM_OUTPUT_ASCII and
ASM_OUTPUT_LIMITED_STRING macros. Each byte in the table
corresponds to a particular byte value [0..255]. For any
given byte value, if the value in the corresponding table
position is zero, the given character can be output directly.
If the table value is 1, the byte must be output as a \ooo
octal escape. If the tables value is anything else, then the
byte value should be output as a \ followed by the value
in the table. Note that we can use standard UN*X escape
sequences for many control characters, but we don't use
\a to represent BEL because some svr4 assemblers (e.g. on
the i386) don't know about that. Also, we don't use \v
since some versions of gas, such as 2.2 did not accept it. */
/* Globalizing directive for a label. */
#define GLOBAL_ASM_OP ".global\t"
#define REGISTER_NAMES { \
"$00","$01","$02","$03","iph","ipl","sph","spl", \
"pch","pcl","wreg","status","dph","dpl","$0e","mulh", \
"$10","$11","$12","$13","$14","$15","$16","$17", \
"$18","$19","$1a","$1b","$1c","$1d","$1e","$1f", \
"$20","$21","$22","$23","$24","$25","$26","$27", \
"$28","$29","$2a","$2b","$2c","$2d","$2e","$2f", \
"$30","$31","$32","$33","$34","$35","$36","$37", \
"$38","$39","$3a","$3b","$3c","$3d","$3e","$3f", \
"$40","$41","$42","$43","$44","$45","$46","$47", \
"$48","$49","$4a","$4b","$4c","$4d","$4e","$4f", \
"$50","$51","$52","$53","$54","$55","$56","$57", \
"$58","$59","$5a","$5b","$5c","$5d","$5e","$5f", \
"$60","$61","$62","$63","$64","$65","$66","$67", \
"$68","$69","$6a","$6b","$6c","$6d","$6e","$6f", \
"$70","$71","$72","$73","$74","$75","$76","$77", \
"$78","$79","$7a","$7b","$7c","$7d","callh","calll", \
"$80","$81","$82","$83","$84","$85","$86","$87", \
"$88","$89","$8a","$8b","$8c","$8d","$8e","$8f", \
"$90","$91","$92","$93","$94","$95","$96","$97", \
"$98","$99","$9a","$9b","$9c","$9d","$9e","$9f", \
"$a0","$a1","$a2","$a3","$a4","$a5","$a6","$a7", \
"$a8","$a9","$aa","$ab","$ac","$ad","$ae","$af", \
"$b0","$b1","$b2","$b3","$b4","$b5","$b6","$b7", \
"$b8","$b9","$ba","$bb","$bc","$bd","$be","$bf", \
"$c0","$c1","$c2","$c3","$c4","$c5","$c6","$c7", \
"$c8","$c9","$ca","$cb","$cc","$cd","$ce","$cf", \
"$d0","$d1","$d2","$d3","$d4","$d5","$d6","$d7", \
"$d8","$d9","$da","$db","$dc","$dd","$de","$df", \
"$e0","$e1","$e2","$e3","$e4","$e5","$e6","$e7", \
"$e8","$e9","$ea","$eb","$ec","$ed","$ee","$ef", \
"$f0","$f1","$f2","$f3","$f4","$f5","$f6","$f7", \
"$f8","$f9","$fa","$fb","$fc","$fd","$fe","$ff", \
"vfph","vfpl","vaph","vapl"}
#define PRINT_OPERAND(STREAM, X, CODE) \
print_operand ((STREAM), (X), (CODE))
#define PRINT_OPERAND_PUNCT_VALID_P(CODE) \
((CODE) == '<' || (CODE) == '>')
#define PRINT_OPERAND_ADDRESS(STREAM, X) print_operand_address(STREAM, X)
/* Since register names don't have a prefix, we must preface all
user identifiers with the '_' to prevent confusion. */
#undef USER_LABEL_PREFIX
#define USER_LABEL_PREFIX "_"
#define LOCAL_LABEL_PREFIX ".L"
#define ASM_OUTPUT_ADDR_DIFF_ELT(STREAM, BODY, VALUE, REL) \
asm_fprintf ((STREAM), "\tpage\t%L%d\n\tjmp\t%L%d\n", (VALUE), (VALUE))
/* elfos.h presumes that we will want switch/case dispatch tables aligned.
This is not so for the ip2k. */
#undef ASM_OUTPUT_CASE_LABEL
#undef ASM_OUTPUT_ADDR_VEC_ELT
#define ASM_OUTPUT_ADDR_VEC_ELT(STREAM, VALUE) \
asm_fprintf ((STREAM), "\tpage\t%L%d\n\tjmp\t%L%d\n", (VALUE), (VALUE))
#define ASM_OUTPUT_ALIGN(STREAM, POWER) \
fprintf ((STREAM), "\t.align %d\n", (POWER))
/* Since instructions are 16 bit word addresses, we should lie and claim that
the dispatch vectors are in QImode. Otherwise the offset into the jump
table will be scaled by the MODE_SIZE. */
#define CASE_VECTOR_MODE QImode
#undef WORD_REGISTER_OPERATIONS
#define MOVE_MAX 1
#define MOVE_RATIO 3
/* MOVE_RATIO is the number of move instructions that is better than a
block move. Make this small on the IP2k, since the code size grows very
large with each move. */
#define TRULY_NOOP_TRUNCATION(OUTPREC, INPREC) 1
#define Pmode HImode
#define FUNCTION_MODE HImode
#define DOLLARS_IN_IDENTIFIERS 0
extern int ip2k_reorg_in_progress;
/* Flag if we're in the middle of IP2k-specific reorganization. */
extern int ip2k_reorg_completed;
/* Flag if we've completed our IP2k-specific reorganization. If we have
then we allow quite a few more tricks than before. */
extern int ip2k_reorg_split_dimode;
extern int ip2k_reorg_split_simode;
extern int ip2k_reorg_split_qimode;
extern int ip2k_reorg_split_himode;
/* Flags for various split operations that we run in sequence. */
extern int ip2k_reorg_merge_qimode;
/* Flag to indicate that it's safe to merge QImode operands. */
#define TRAMPOLINE_TEMPLATE(FILE) abort ()
#define TRAMPOLINE_SIZE 4
#define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
{ \
emit_move_insn (gen_rtx_MEM (HImode, plus_constant ((TRAMP), 2)), \
CXT); \
emit_move_insn (gen_rtx_MEM (HImode, plus_constant ((TRAMP), 6)), \
FNADDR); \
}
/* Store in cc_status the expressions
that the condition codes will describe
after execution of an instruction whose pattern is EXP.
Do not alter them if the instruction would not alter the cc's. */
#define NOTICE_UPDATE_CC(EXP, INSN) (void)(0)
/* Output assembler code to FILE to increment profiler label # LABELNO
for profiling a function entry. */
#define FUNCTION_PROFILER(FILE, LABELNO) \
fprintf ((FILE), "/* profiler %d */", (LABELNO))
#undef ENDFILE_SPEC
#undef LINK_SPEC
#undef STARTFILE_SPEC
#if defined(__STDC__) || defined(ALMOST_STDC)
#define AS2(a,b,c) #a "\t" #b "," #c
#define AS1(a,b) #a "\t" #b
#else
#define AS1(a,b) "a b"
#define AS2(a,b,c) "a b,c"
#endif
#define OUT_AS1(a,b) output_asm_insn (AS1 (a,b), operands)
#define OUT_AS2(a,b,c) output_asm_insn (AS2 (a,b,c), operands)
#define CR_TAB "\n\t"
#define PREDICATE_CODES \
{"ip2k_ip_operand", {MEM}}, \
{"ip2k_short_operand", {MEM}}, \
{"ip2k_gen_operand", {MEM, REG, SUBREG}}, \
{"ip2k_nonptr_operand", {REG, SUBREG}}, \
{"ip2k_ptr_operand", {REG, SUBREG}}, \
{"ip2k_split_dest_operand", {REG, SUBREG, MEM}}, \
{"ip2k_sp_operand", {REG}}, \
{"ip2k_nonsp_reg_operand", {REG, SUBREG}}, \
{"ip2k_symbol_ref_operand", {SYMBOL_REF}}, \
{"ip2k_binary_operator", {PLUS, MINUS, MULT, DIV, \
UDIV, MOD, UMOD, AND, IOR, \
XOR, COMPARE, ASHIFT, \
ASHIFTRT, LSHIFTRT}}, \
{"ip2k_unary_operator", {NEG, NOT, SIGN_EXTEND, \
ZERO_EXTEND}}, \
{"ip2k_unsigned_comparison_operator", {LTU, GTU, NE, \
EQ, LEU, GEU}},\
{"ip2k_signed_comparison_operator", {LT, GT, LE, GE}},
#define DWARF2_DEBUGGING_INFO 1
#define DWARF2_ASM_LINE_DEBUG_INFO 1
#define DBX_REGISTER_NUMBER(REGNO) (REGNO)
/* Miscellaneous macros to describe machine specifics. */
#define IS_PSEUDO_P(R) (REGNO (R) >= FIRST_PSEUDO_REGISTER)
/* Default calculations would cause DWARF address sizes to be 2 bytes,
but the Harvard architecture of the IP2k and the word-addressed 64k
of instruction memory causes us to want a 32-bit "address" field. */
#undef DWARF2_ADDR_SIZE
#define DWARF2_ADDR_SIZE 4

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,49 +0,0 @@
LIB1ASMSRC = ip2k/libgcc.S
LIB1ASMFUNCS = \
_indcall \
_mulhi3 \
_mulsi3 \
_muldi3 \
_udivmodhi4 \
_divmodhi4 \
_udivmodsi4 \
_divmodsi4 \
_udivmoddi4 \
_divmoddi4 \
_cmpqi2 \
_cmphi2 \
_cmpsi2 \
_cmpdi2 \
_cmpdi2_dp \
_fp_pop_args_ret \
_pop2_args_ret \
_leaf_fp_pop_args_ret \
_movmemhi_countqi \
_movmemhi_counthi \
abort \
_exit
# libgcc2.h thinks that nobody would have SI mode when
# MIN_UNITS_PER_WORD == 1, so lie to keep from major compiler errors.
TARGET_LIBGCC2_CFLAGS = -Dinhibit_libc -DDF=SF -g -DMIN_UNITS_PER_WORD=2
fp-bit.c: $(srcdir)/config/fp-bit.c $(srcdir)/config/ip2k/t-ip2k crt0.o
echo '#define FLOAT' > fp-bit.c
echo '#define FLOAT_ONLY' >> fp-bit.c
echo '#define DF SF' >> fp-bit.c
echo '#define DI SI' >> fp-bit.c
echo '#define CMPtype QItype' >> fp-bit.c
echo '#define SMALL_MACHINE' >> fp-bit.c
echo 'typedef int QItype __attribute__ ((mode (QI)));' >> fp-bit.c
cat $(srcdir)/config/fp-bit.c >> fp-bit.c
FPBIT = fp-bit.c
# Our crt0 is written in assembler and we don't really support profiling.
CRT0_S = $(srcdir)/config/ip2k/crt0.S
MCRT0_S = $(CRT0_S)

View File

@ -1,97 +0,0 @@
Copyright (C) 2002
Free Software Foundation, Inc.
Implementation Notes
====================
IEEE floating point comparisons
Ian Dall <ian@beware.dropbear.id.au>
------------------------------------
The ns32x81 fpu handles most operands in hardware, but traps on NaN,
Inf and Denormalized numbers. The correct behavior can be handled by
the trap handler. This is mostly transparent to the compiler, but in
the case of floating point comparisons, the trap handler and the
compiler must co-operate.
Comparing a Nan with anything (including another Nan) is an unordered
comparison and a NE test should be true and any other test should be
false. There is nothing the trap handler can do to the condition codes
to make, for example ble and bgt (the machine instructions, not the
gcc insn's) both fail.
The L flag (normally used for unsigned comparisons) is cleared by a floating
point compare. So, it is possible for the trap handler to communicate that
it has seen a NaN by setting this flag.
This can get confusing so the following documents the reasoning. There
are only 3 flags of significance, N, Z and L. In what follows AB is
the conjunction of A and B ("and") A+B is the disjunction of A and B
("or"), upper case represents true and lower case represents false. So
"Zl" is "Z AND (NOT L)".
Also, we can require that the trap handler clears N and Z, whenever it
sets L. This means that in many cases, we do not need to test if L is
set or clear. The operations we require are:
Operator Expression Check L
GT Nl No
LT znl Yes
GE (Z+N)l No
LE nl Yes
EQ Zl No
NE z+L No
For example, the emitted code for the case of LT is
bhi 0f
blt %0
0:
which is, in effect, "branch if ordered and less than."
We also need insns for the reverse branches. These have the PC and
the label ref operands reversed. Thus the reverse bgt has a pattern:
(set (pc)
(if_then_else (gt (cc0)
(const_int 0))
(pc)
(label_ref (match_operand 0 "" ""))))
This is identical to a normal branch with the test complimented:
(set (pc)
(if_then_else (not (gt (cc0)
(const_int 0)))
(label_ref (match_operand 0 "" "")
(pc))))
Thus we need a family of (NOT cond) tests. For integers this is easy,
a reverse blt becomes bge. However, the possibility of unordered
comparison complicates the floating point case. So, we need to
compliment the above expressions, using deMorgan's theorem, for the reverse
branch:
Operator Expression Check L
RGT n+L Yes
RLT Z+N+L Yes
RGE zn+L Yes
RLE N+L Yes
REQ z+L No
RNE Zl No
For example the emitted code for the case of RLT is
bge %0
bhi %0
which is, in effect "branch if not less than and not unordered."
These extra comparisons are safe if the trap handler doesn't set the
L flag, since in that case the additional "bhi" instructions are never
taken. Also, these extra branch instructions are controlled by the
"-mieee-compare" option.

View File

@ -1,68 +0,0 @@
NS32K Port Status Last updated 19 Dec 2002
Recent development of the ns32k port has been as a cross compiler. As
such a native bootstrap has not been performed. Currently the
compiler successfully builds a NetBSD kernel and has been tested on
the testsuite with "make check" configured to remotely execute
tests on a pc532-netbsd.
There are a few remaining failures in the testsuite, none of which
result in incorrect code generation or unexpected ICEs.
Here follows comments on the outstanding testsuite failures:
gcc.c-torture/compile/20001226-1.c, -Os
This typically fails due to a time out or exhausting available memory.
In the past it has been found to eventually compile in under 6
minutes, with consuming up to 90MB. The timeout in dejagnu is 5
minutes.
gcc.c-torture/execute/builtin-constant.c
I don't understand why this fails. Looking at the generated assembler,
the first invocation of btest returns "1" and the second "0". Presumably
the flow analysis is meant to indicate this is a "builtin constant".
The documentation for __builtin_constant says it is allowed to fail if the
compiler can't deduce that something is a constant, so the compiler is
correct if not ideal.
gcc.dg/debug/debug-1.c scan-assembler xyzzy:
At -O3 level of optimization, variable xyzzy gets eliminated. Isn't it
reasonable that the debugging info is gone too? Indeed, the
documentation says this is expected behavior.
gcc.dg/debug/debug-2.c scan-assembler xyzzy:
As for the above.
gcc.dg/20010912-1.c
PIC is supported for the compiler, but we get a link error until we get a
cross linker which can handle dynamic linking.
gcc.dg/20020304-1.c -O -fssa -fssa-ccp
ICE -fssa and -fssa-ccp are "experimental" options. Assume not a
backend problem.
gcc.dg/20021014-1.c (test for excess errors)
This is a test of the "-p" option. Fails due to lack of mcrt0.o. This
platform support "-pg" but not "-p"
gcc.dg/20021018-1.c (test for excess errors)
Fail due to lack of dynamic link support at link time.
gcc.dg/bitfld-3.c (test for excess errors)
Execution passes, but compilation produces excessive warnings. These warnings
actually seem reasonable. The code uses __attribute__((aligned (8)), and
the maximum alignment which makes any sense for this architecture is 4.
gcc.dg/duff-2.c (test for excess errors)
Execution passes, but compilation produces excessive warnings. Doesn't look
like a backend problem.
gcc.dg/uninit-A.c -O2 -Wall -S
Bogus warnings, almost certainly not backend.
gcc.dg/special/weak-1.c execution test
X This fails for i386 too. I don't understand what the correct behavior
for this test is.
gcc.dg/special/gcsec-1.c (test for excess errors)
a.out deficiency. -ffunction-sections and -fdata-sections not supported.

View File

@ -1,34 +0,0 @@
/* Lightweight function to test for ieee unordered comparison
Copyright (C) 2002
Free Software Foundation, Inc.
Contributed by Ian Dall <ian@beware.dropbear.id.au>
This file is part of GCC.
GCC 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.
GCC 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 GCC; see the file COPYING. If not, write to
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
# define ISNAN(x) ( \
{ \
union u { double d; unsigned int i[2]; } *t = (union u *)&(x); \
((t->i[1] & 0x7ff00000) == 0x7ff00000) && \
(t->i[0] != 0 || (t->i[1] & 0xfffff) != 0); \
})
int __unorddf2 (double, double);
int __unorddf2 (double a, double b)
{
return ISNAN(a) || ISNAN(b);
}

View File

@ -1,34 +0,0 @@
/* Lightweight function to test for ieee unordered comparison
Copyright (C) 2002
Free Software Foundation, Inc.
Contributed by Ian Dall <ian@beware.dropbear.id.au>
This file is part of GCC.
GCC 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.
GCC 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 GCC; see the file COPYING. If not, write to
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
# define ISNAN(x) ( \
{ \
union u { float f; unsigned int i; } *t = (union u *)&(x); \
((t->i & 0x7f800000) == 0x7f800000) && \
((t->i & 0x7fffff) != 0); \
})
int __unordsf2 ( float, float);
int __unordsf2 ( float a, float b)
{
return ISNAN(a) || ISNAN(b);
}

View File

@ -1,109 +0,0 @@
/* Configuration for a ns32532 running NetBSD as the target machine.
Copyright (C) 1988, 1994, 1995, 1996, 1998, 2002, 2004, 2005
Free Software Foundation, Inc.
This file is part of GCC.
GCC 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.
GCC 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 GCC; see the file COPYING. If not, write to
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
#define TARGET_OS_CPP_BUILTINS() \
do \
{ \
NETBSD_OS_CPP_BUILTINS_AOUT(); \
builtin_define ("__ns32k__"); \
} \
while (0)
/* Compile for the floating point unit & 32532 by default;
Don't assume SB is zero;
Don't use bit-field instructions;
FPU is 32381;
Use multiply-add instructions */
#undef TARGET_DEFAULT
#define TARGET_DEFAULT \
(MASK_32532 | MASK_32381 | MASK_IEEE_COMPARE | MASK_MULT_ADD)
/* 32-bit alignment for efficiency */
#undef POINTER_BOUNDARY
#define POINTER_BOUNDARY 32
/* 32-bit alignment for efficiency */
#undef FUNCTION_BOUNDARY
#define FUNCTION_BOUNDARY 32
/* 32532 spec says it can handle any alignment. Rumor from tm-ns32k.h
tells this might not be actually true (but it's for 32032, perhaps
National has fixed the bug for 32532). You might have to change this
if the bug still exists. */
#undef STRICT_ALIGNMENT
#define STRICT_ALIGNMENT 0
/* Use pc relative addressing whenever possible,
it's more efficient than absolute (ns32k.c)
You have to fix a bug in gas 1.38.1 to make this work with gas,
patch available from jkp@cs.hut.fi.
(NetBSD's gas version has this patch already applied) */
#define PC_RELATIVE
/* Operand of bsr or jsr should be just the address. */
#define CALL_MEMREF_IMPLICIT
/* movd insns may have floating point constant operands. */
#define MOVD_FLOAT_OK
/* Define a CPP_SPEC appropriate for NetBSD. */
#undef CPP_SPEC
#define CPP_SPEC NETBSD_CPP_SPEC
/* Make gcc agree with <machine/ansi.h> */
#undef SIZE_TYPE
#define SIZE_TYPE "unsigned int"
#undef PTRDIFF_TYPE
#define PTRDIFF_TYPE "int"
/* This is BSD, so it wants DBX format. */
#define DBX_DEBUGGING_INFO 1
/* Do not break .stabs pseudos into continuations. */
#define DBX_CONTIN_LENGTH 0
/* This is the char to use for continuation (in case we need to turn
continuation back on). */
#define DBX_CONTIN_CHAR '?'
/* Don't default to pcc-struct-return, because gcc is the only compiler, and
we want to retain compatibility with older gcc versions. */
#undef PCC_STATIC_STRUCT_RETURN
#define DEFAULT_PCC_STRUCT_RETURN 0
/* Until they use ELF or something that handles dwarf2 unwinds
and initialization stuff better. */
#define DWARF2_UNWIND_INFO 0

View File

@ -1,46 +0,0 @@
/* Definitions of target machine for GNU compiler. NS32000 version.
Copyright (C) 2000, 2004 Free Software Foundation, Inc.
Contributed by Michael Tiemann (tiemann@cygnus.com)
This file is part of GCC.
GCC 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.
GCC 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 GCC; see the file COPYING. If not, write to
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
/* Prototypes for functions in ns32k.c */
#ifdef RTX_CODE
extern enum reg_class secondary_reload_class (enum reg_class,
enum machine_mode, rtx);
extern int reg_or_mem_operand (rtx, enum machine_mode);
extern void split_di (rtx[], int, rtx[], rtx[]);
extern void expand_block_move (rtx[]);
extern int global_symbolic_reference_mentioned_p (rtx, int);
extern void print_operand (FILE *, rtx, int);
extern void print_operand_address (FILE *, rtx);
extern const char *output_move_double (rtx *);
extern const char *output_shift_insn (rtx *);
extern int symbolic_reference_mentioned_p (rtx);
extern void ns32k_notice_update_cc (rtx, rtx);
#endif /* RTX_CODE */
#ifdef TREE_CODE
extern int ns32k_return_pops_args (tree, tree, int);
#endif /* TREE_CODE */
extern int hard_regno_mode_ok (int, enum machine_mode);
extern int register_move_cost (enum reg_class, enum reg_class);
extern const char *output_move_dconst (int, const char *);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -1,108 +0,0 @@
; Options for the NS32000 port of the compiler.
; Copyright (C) 2005 Free Software Foundation, Inc.
;
; This file is part of GCC.
;
; GCC 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.
;
; GCC 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 GCC; see the file COPYING. If not, write to the Free
; Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA
; 02110-1301, USA.
m32032
Target RejectNegative
Optimize for 32032
m32081
Target RejectNegative Report Mask(32081)
Use hardware fp
m32332
Target RejectNegative Report Mask(32332)
Optimize for 32332
m32381
Target RejectNegative Report Mask(32381)
Use the 32381 fpu
m32532
Target RejectNegative Report Mask(32532)
Optimize for 32532
mbitfield
Target RejectNegative Report Mask(BITFIELD)
Use bit-field instructions
mhimem
Target RejectNegative Report Mask(HIMEM)
Generate code for high memory
mieee-compare
Target RejectNegative Report Mask(IEEE_COMPARE)
Use IEEE math for fp comparisons
mmult-add
Target RejectNegative Report Mask(MULT_ADD)
Use multiply-accumulate fp instructions
mnobitfield
Target RejectNegative Report InverseMask(BITFIELD)
Do not use bit-field instructions
mnohimem
Target RejectNegative Report InverseMask(HIMEM)
Generate code for low memory
mnoieee-compare
Target RejectNegative Report InverseMask(IEEE_COMPARE)
Do not use IEEE math for fp comparisons
mnomult-add
Target RejectNegative Report InverseMask(MULT_ADD)
Do not use multiply-accumulate fp instructions
mnoregparm
Target RejectNegative Report InverseMask(REGPARM)
Pass all arguments on the stack
mnortd
Target RejectNegative Report InverseMask(RTD)
Use the normal calling convention
mnosb
Target RejectNegative Report InverseMask(SB)
Do not use register sb
mnosrc
Target RejectNegative Report InverseMask(SRC)
Do not use the 'small register classes' kludge
mregparm
Target RejectNegative Report Mask(REGPARM)
Pass some arguments in registers
mrtd
Target RejectNegative Report Mask(RTD)
Use an alternative calling convention
msb
Target RejectNegative Report Mask(SB)
Register sb is zero, use it for absolute addressing
msoft-float
Target RejectNegative
Do not use hardware fp
msrc
Target RejectNegative Report Mask(SRC)
Use the 'small register classes' kludge

View File

@ -1,4 +0,0 @@
# We want fine grained libraries, so use the new code to build the
# floating point emulation libraries.
LIB2FUNCS_EXTRA = $(srcdir)/config/ns32k/__unorddf2.c \
$(srcdir)/config/ns32k/__unordsf2.c

View File

@ -1,68 +0,0 @@
/* Configuration file for sparc OpenBSD target.
Copyright (C) 1999, 2002, 2003, 2004 Free Software Foundation, Inc.
This file is part of GCC.
GCC 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.
GCC 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 GCC; see the file COPYING. If not, write to
the Free Software Foundation, 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA. */
/* Target OS builtins. */
#define TARGET_OS_CPP_BUILTINS() \
do \
{ \
builtin_define ("__unix__"); \
builtin_define ("__OpenBSD__"); \
builtin_assert ("system=unix"); \
builtin_assert ("system=OpenBSD"); \
} \
while (0)
/* Layout of source language data types */
/* This must agree with <machine/ansi.h> */
#undef SIZE_TYPE
#define SIZE_TYPE "unsigned int"
#undef PTRDIFF_TYPE
#define PTRDIFF_TYPE "int"
#undef WCHAR_TYPE
#define WCHAR_TYPE "int"
#undef WCHAR_TYPE_SIZE
#define WCHAR_TYPE_SIZE 32
/* Specific options for DBX Output. */
/* This is BSD, so it wants DBX format. */
#define DBX_DEBUGGING_INFO 1
/* This is the char to use for continuation */
#define DBX_CONTIN_CHAR '?'
/* Stack & calling: aggregate returns. */
/* Don't default to pcc-struct-return, because gcc is the only compiler, and
we want to retain compatibility with older gcc versions. */
#undef DEFAULT_PCC_STRUCT_RETURN
#define DEFAULT_PCC_STRUCT_RETURN 0
/* Assembler format: exception region output. */
/* All configurations that don't use elf must be explicit about not using
dwarf unwind information. */
#define DWARF2_UNWIND_INFO 0
#undef ASM_PREFERRED_EH_DATA_FORMAT

View File

@ -1,5 +0,0 @@
# The native linker doesn't handle linking -fpic code with -fPIC code. Ugh.
# We cope by building both variants of libgcc.
MULTILIB_OPTIONS = fpic/fPIC
LIBGCC = stmp-multilib
INSTALL_LIBGCC = install-multilib

View File

@ -2244,8 +2244,6 @@ GNU Compiler Collection on your machine.
@item
@uref{#x-ibm-aix,,*-ibm-aix*}
@item
@uref{#ip2k-x-elf,,ip2k-*-elf}
@item
@uref{#iq2000-x-elf,,iq2000-*-elf}
@item
@uref{#m32r-x-elf,,m32r-*-elf}
@ -3175,16 +3173,6 @@ both Power or PowerPC processors.
A default can be specified with the @option{-mcpu=@var{cpu_type}}
switch and using the configure option @option{--with-cpu-@var{cpu_type}}.
@html
<hr />
@end html
@heading @anchor{ip2k-x-elf}ip2k-*-elf
Ubicom IP2022 micro controller.
This configuration is intended for embedded systems.
There are no standard Unix configurations.
Use @samp{configure --target=ip2k-elf --enable-languages=c} to configure GCC@.
@html
<hr />
@end html

View File

@ -599,12 +599,6 @@ Objective-C and Objective-C++ Dialects}.
-mam33-2 -mno-am33-2 @gol
-mno-crt0 -mrelax}
@emph{NS32K Options}
@gccoptlist{-m32032 -m32332 -m32532 -m32081 -m32381 @gol
-mmult-add -mnomult-add -msoft-float -mrtd -mnortd @gol
-mregparam -mnoregparam -msb -mnosb @gol
-mbitfield -mnobitfield -mhimem -mnohimem}
@emph{PDP-11 Options}
@gccoptlist{-mfpu -msoft-float -mac0 -mno-ac0 -m40 -m45 -m10 @gol
-mbcopy -mbcopy-builtin -mint32 -mno-int16 @gol
@ -6970,7 +6964,6 @@ platform.
* MIPS Options::
* MMIX Options::
* MN10300 Options::
* NS32K Options::
* PDP-11 Options::
* PowerPC Options::
* RS/6000 and PowerPC Options::
@ -10407,148 +10400,6 @@ has an effect when used on the command line for the final link step.
This option makes symbolic debugging impossible.
@end table
@node NS32K Options
@subsection NS32K Options
@cindex NS32K options
These are the @samp{-m} options defined for the 32000 series. The default
values for these options depends on which style of 32000 was selected when
the compiler was configured; the defaults for the most common choices are
given below.
@table @gcctabopt
@item -m32032
@itemx -m32032
@opindex m32032
@opindex m32032
Generate output for a 32032. This is the default
when the compiler is configured for 32032 and 32016 based systems.
@item -m32332
@itemx -m32332
@opindex m32332
@opindex m32332
Generate output for a 32332. This is the default
when the compiler is configured for 32332-based systems.
@item -m32532
@itemx -m32532
@opindex m32532
@opindex m32532
Generate output for a 32532. This is the default
when the compiler is configured for 32532-based systems.
@item -m32081
@opindex m32081
Generate output containing 32081 instructions for floating point.
This is the default for all systems.
@item -m32381
@opindex m32381
Generate output containing 32381 instructions for floating point. This
also implies @option{-m32081}. The 32381 is only compatible with the 32332
and 32532 cpus. This is the default for the pc532-netbsd configuration.
@item -mmulti-add
@opindex mmulti-add
Try and generate multiply-add floating point instructions @code{polyF}
and @code{dotF}. This option is only available if the @option{-m32381}
option is in effect. Using these instructions requires changes to
register allocation which generally has a negative impact on
performance. This option should only be enabled when compiling code
particularly likely to make heavy use of multiply-add instructions.
@item -mnomulti-add
@opindex mnomulti-add
Do not try and generate multiply-add floating point instructions
@code{polyF} and @code{dotF}. This is the default on all platforms.
@item -msoft-float
@opindex msoft-float
Generate output containing library calls for floating point.
@strong{Warning:} the requisite libraries may not be available.
@item -mieee-compare
@itemx -mno-ieee-compare
@opindex mieee-compare
@opindex mno-ieee-compare
Control whether or not the compiler uses IEEE floating point
comparisons. These handle correctly the case where the result of a
comparison is unordered.
@strong{Warning:} the requisite kernel support may not be available.
@item -mnobitfield
@opindex mnobitfield
Do not use the bit-field instructions. On some machines it is faster to
use shifting and masking operations. This is the default for the pc532.
@item -mbitfield
@opindex mbitfield
Do use the bit-field instructions. This is the default for all platforms
except the pc532.
@item -mrtd
@opindex mrtd
Use a different function-calling convention, in which functions
that take a fixed number of arguments return pop their
arguments on return with the @code{ret} instruction.
This calling convention is incompatible with the one normally
used on Unix, so you cannot use it if you need to call libraries
compiled with the Unix compiler.
Also, you must provide function prototypes for all functions that
take variable numbers of arguments (including @code{printf});
otherwise incorrect code will be generated for calls to those
functions.
In addition, seriously incorrect code will result if you call a
function with too many arguments. (Normally, extra arguments are
harmlessly ignored.)
This option takes its name from the 680x0 @code{rtd} instruction.
@item -mregparam
@opindex mregparam
Use a different function-calling convention where the first two arguments
are passed in registers.
This calling convention is incompatible with the one normally
used on Unix, so you cannot use it if you need to call libraries
compiled with the Unix compiler.
@item -mnoregparam
@opindex mnoregparam
Do not pass any arguments in registers. This is the default for all
targets.
@item -msb
@opindex msb
It is OK to use the sb as an index register which is always loaded with
zero. This is the default for the pc532-netbsd target.
@item -mnosb
@opindex mnosb
The sb register is not available for use or has not been initialized to
zero by the run time system. This is the default for all targets except
the pc532-netbsd. It is also implied whenever @option{-mhimem} or
@option{-fpic} is set.
@item -mhimem
@opindex mhimem
Many ns32000 series addressing modes use displacements of up to 512MB@.
If an address is above 512MB then displacements from zero can not be used.
This option causes code to be generated which can be loaded above 512MB@.
This may be useful for operating systems or ROM code.
@item -mnohimem
@opindex mnohimem
Assume code will be loaded in the first 512MB of virtual address space.
This is the default for all platforms.
@end table
@node PDP-11 Options
@subsection PDP-11 Options
@cindex PDP-11 Options

View File

@ -2165,76 +2165,6 @@ An integer constant with all bits set except exactly one.
Any SYMBOL_REF.
@end table
@item IP2K---@file{ip2k.h}
@table @code
@item a
@samp{DP} or @samp{IP} registers (general address)
@item f
@samp{IP} register
@item j
@samp{IPL} register
@item k
@samp{IPH} register
@item b
@samp{DP} register
@item y
@samp{DPH} register
@item z
@samp{DPL} register
@item q
@samp{SP} register
@item c
@samp{DP} or @samp{SP} registers (offsettable address)
@item d
Non-pointer registers (not @samp{SP}, @samp{DP}, @samp{IP})
@item u
Non-SP registers (everything except @samp{SP})
@item R
Indirect through @samp{IP}---Avoid this except for @code{QImode}, since we
can't access extra bytes
@item S
Indirect through @samp{SP} or @samp{DP} with short displacement (0..127)
@item T
Data-section immediate value
@item I
Integers from @minus{}255 to @minus{}1
@item J
Integers from 0 to 7---valid bit number in a register
@item K
Integers from 0 to 127---valid displacement for addressing mode
@item L
Integers from 1 to 127
@item M
Integer @minus{}1
@item N
Integer 1
@item O
Zero
@item P
Integers from 0 to 255
@end table
@item MIPS---@file{mips.h}
@table @code
@item d

View File

@ -1,3 +1,8 @@
2005-07-20 Kazu Hirata <kazu@codesourcery.com>
* gcc.dg/20020312-2.c, gcc.dg/sibcall-3.c, gcc.dg/sibcall-4.c,
gcc.dg/cpp/assert4.c: Don't mention obsolete ports.
2005-07-19 James A. Morrison <phython@gcc.gnu.org>
* gcc.dg/fold-abs-1.c: New test.

View File

@ -44,8 +44,6 @@ extern void abort (void);
/* No pic register. */
#elif defined(__mn10300__)
/* No pic register. */
#elif #cpu(ns32k)
/* No pic register. */
#elif defined(__hppa__)
/* PIC register is %r27 or %r19, but is used even without -fpic. */
#elif defined(__pdp11__)

View File

@ -254,14 +254,6 @@
# error
#endif
#if defined __i860__
# if !#cpu(i860) || !#machine(i860)
# error
# endif
#elif #cpu(i860) || #machine(i860)
# error
#endif
#if defined __ia64__
# if !#cpu(ia64) || !#machine(ia64)
# error
@ -319,14 +311,6 @@
# error
#endif
#if defined __ns32k__
# if !#cpu(ns32k) || !#machine(ns32k)
# error
# endif
#elif #cpu(ns32k) || #machine(ns32k)
# error
#endif
#if defined __pdp11__
# if !#cpu(pdp11) || !#machine(pdp11)
# error

View File

@ -5,7 +5,7 @@
Copyright (C) 2002 Free Software Foundation Inc.
Contributed by Hans-Peter Nilsson <hp@bitrange.com> */
/* { dg-do run { xfail arc-*-* avr-*-* c4x-*-* cris-*-* h8300-*-* hppa*64*-*-* ip2k-*-* m32r-*-* m68hc1?-*-* m681?-*-* m680*-*-* m68k-*-* mcore-*-* mn10300-*-* ns32k-*-* xstormy16-*-* v850*-*-* vax-*-* xtensa-*-* } } */
/* { dg-do run { xfail arc-*-* avr-*-* c4x-*-* cris-*-* h8300-*-* hppa*64*-*-* m32r-*-* m68hc1?-*-* m681?-*-* m680*-*-* m68k-*-* mcore-*-* mn10300-*-* xstormy16-*-* v850*-*-* vax-*-* xtensa-*-* } } */
/* { dg-options "-O2 -foptimize-sibling-calls" } */
/* The option -foptimize-sibling-calls is the default, but serves as

View File

@ -5,7 +5,7 @@
Copyright (C) 2002 Free Software Foundation Inc.
Contributed by Hans-Peter Nilsson <hp@bitrange.com> */
/* { dg-do run { xfail arc-*-* avr-*-* c4x-*-* cris-*-* h8300-*-* hppa*64*-*-* ip2k-*-* m32r-*-* m68hc1?-*-* m681?-*-* m680*-*-* m68k-*-* mcore-*-* mn10300-*-* ns32k-*-* xstormy16-*-* v850*-*-* vax-*-* xtensa-*-* } } */
/* { dg-do run { xfail arc-*-* avr-*-* c4x-*-* cris-*-* h8300-*-* hppa*64*-*-* m32r-*-* m68hc1?-*-* m681?-*-* m680*-*-* m68k-*-* mcore-*-* mn10300-*-* xstormy16-*-* v850*-*-* vax-*-* xtensa-*-* } } */
/* { dg-options "-O2 -foptimize-sibling-calls" } */
/* The option -foptimize-sibling-calls is the default, but serves as