Bulk patch from Linas.

From-SVN: r28178
This commit is contained in:
Linas Vepstas 1999-07-19 19:26:30 +00:00 committed by Richard Henderson
parent 14eee79459
commit 92d6db668f
15 changed files with 3730 additions and 989 deletions

View File

@ -1,3 +1,72 @@
1999-07-19 Linas Vepstas <linas@linas.org>
* config/i370/README: New file.
* config/i370/linux.h: New file.
* config/i370/mvs.h: New file.
* config/i370/oe.h: New file.
* config/i370/t-linux: New file.
* config/i370/t-mvs: New file.
* config/i370/t-oe: New file.
* config/i370/x-oe: New file.
* config/i370/xm-linux.h: New file.
* config/i370/xm-mvs.h: New file.
* config/i370/xm-oe.h: New file.
* i370.c (label_node_t): Add first_ref_page, label_addr,
label_first_ref, label_last_ref members.
(mvs_need_base_reload): Renamed from mvs_label_emitted.
(MAX_MVS_LABEL_SIZE): Define.
(MAX_LONG_LABEL_SIZE): Define.
(alias_node_t, alias_anchor, alias_number): New.
(mvs_function_table): Reorder for EBCDIC.
(ascebc, ebcasc): Unconditionally define.
(i370_branch_dest, i370_branch_length): New functions.
(i370_short_branch, i370_label_scan): New functions.
(mvs_get_label): Renamed from mvs_add_label. Search for
an existing label before creating a new one.
(mvs_add_label): New function.
(mvs_get_label_page): New function.
(mvs_free_label_list): Renamed from mvs_free_label. Iterate
over the entire list.
(mvs_check_page) [TARGET_HLASM]: Use BASR not BALR.
(mvs_check_page) [TARGET_ELF_ABI]: New function.
(mvs_add_alias, mvs_need_alias): New functions.
(mvs_get_alias, mvs_check_alias): New functions.
(handle_pragma): New function.
(mvs_function_check): New function.
(unsigned_jump_follows_p): Search harder.
(i370_function_prolog) [TARGET_HLASM]: Handle LE370. Scan labels.
(i370_function_prolog) [TARGET_ELF_ABI]: New function.
* i370.h (TARGET_VERSION): Delete.
(CPP_SPEC, CPP_PREDEFINES): Delete.
(mvs_label_emitted): Delete.
(TARGET_EBCDIC): Delete.
(MAP_CHARACTER): Define only if TARGET_EBCDIC.
(HANDLE_PRAGMA): Define.
(HARD_REGNO_NREGS): Handle complex modes.
(HARD_REGNO_MODE_OK): Likewise.
(CLASS_MAX_NREGS): Likewise.
(RET_REG): Likewise.
(EXTRA_CONSTRAINT): Define.
(RETURN_IN_MEMORY): True for DImode.
(TRAMPOLINE_TEMPLATE): Use gen_rtx instead of GEN_INT.
(FUNCTION_PROFILER): Delete.
(COUNT_REGS): Fail if REG_P but not REG_OK_FOR_BASE_P.
(NOTICE_UPDATE_CC): Correct handling of MULT, DIV, logicals and shifts.
(TARGET_ESC, TARGET_BELL): Conditionally define for TARGET_EBCDIC.
(TARGET_BS, TARGET_TAB, TARGET_NEWLINE): Likewise.
(TARGET_VT, TARGET_FF, TARGET_CR): Likewise.
(ASM_FILE_START): Add "RMODE ANY".
(ASM_OUTPUT_EXTERNAL): Check for aliases.
(ASM_GLOBALIZE_LABEL): Likewise.
(ASM_OUTPUT_LABELREF): Likewise.
(ASM_OUTPUT_COMMON): Likewise.
(PRINT_OPERAND): Handle 'K', 'W', default.
(PRINT_OPERAND_ADDRESS): New.
(Lots of defines): Add support for TARGET_ELF_ABI.
* i370.md (attr length): New. Define for all patterns.
(*): Lots of tweeks to assembly output and constraints.
Mon Jul 19 15:09:29 1999 David Edelsohn <edelsohn@gnu.org>
* rs6000.md (arithmetic, logical, and shift Rc combiner patterns):

87
gcc/config/i370/README Normal file
View File

@ -0,0 +1,87 @@
This directory contains code for building a compiler for the
32-bit ESA/390 architecture. It supports three different styles
of assembly:
-- MVS for use with the HLASM assembler
-- Open Edition (USS Unix System Services)
-- ELF/Linux for use with the binutils/gas GNU assembler.
Cross-compiling Hints
---------------------
When building a cross-compiler on AIX, set the environment variable CC
and be sure to set the -ma and -qcpluscmt flags; i.e.
export CC="cc -ma -qcpluscmt"
do this *before* running configure, e.g.
configure --target=i370-ibm-linux --prefix=/where/to/install/usr
The Objective-C and FORTRAN front ends don't build. To avoid looking at
errors, do only
make LANGUAGES=c
OpenEdition Hints
-----------------
The shell script "install" is handy for users of OpenEdition.
ChangeLog
---------
Oct98-Dec98 -- add ELF back end; work on getting ABI more or less correct.
98.12.05 -- fix numerous MVC bugs
99.02.06 -- multiply insn sometimes not generated when needed.
-- extendsidi bugs, bad literal values printed
-- remove broken adddi subdi patterns
99.02.15 -- add clrstrsi pattern
-- fix -O2 divide bug
99.03.04 -- base & index reg usage bugs
99.03.15 -- fixes for returning long longs and structs (struct value return)
99.03.29 -- fix handling & alignment of shorts
99.03.31 -- clobbered register 14 is not always clobbered
99.04.02 -- operand constraints for cmphi
99.04.07 -- function pointer fixes for call, call_value patterns,
function pointers derefed once too often.
99.04.14 -- add pattern to print double-wide int
-- check intval<4096 for misc operands
-- add clrstrsi pattern
-- movstrsi fixes
99.04.16 -- use r2 to pass args into r11 in subroutine call.
-- fixes to movsi; some operand combinations impossible;
rework constraints
-- start work on forward jump optimization
-- char alignment bug
99.04.25 -- add untyped_call pattern so that builtin_apply works
99.04.27 -- fixes to compare logical under mask
99.04.28 -- reg 2 is clobbered by calls
99.04.30 -- fix rare mulsi bug
99.04.30 -- add constraints so that all RS, SI, SS forms insns have valid
addressing modes
99.04.30 -- major condition code fixes. The old code was just way off
w.r.t. which insns set condition code, and the codes that
were set. The extent of this damage was unbeleivable.
99.05.01 -- restructuring of operand constraints on many patterns,
many lead to invalid instructions being genned.
99.05.02 -- float pt fixes
-- fix movdi issue bugs
99.05.03 -- fix divide insn; was dividing incorrectly
99.05.05 -- fix sign extension problems on andhi
-- deprecate some constraints
99.05.06 -- add set_attr insn lengths; fix misc litpool sizes
-- add notes about how unsigned jumps work (i.e.
arithmetic vs. logical vs. signed vs unsigned).
99.05.11 -- use insn length to predict forward branch target;
use relative branchining where possible,
remove un-needed base register reload.
99.05.15 -- fix movstrsi, clrstrsi, cmpstrsi patterns as per conversation
w/ Richard Henderson

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

128
gcc/config/i370/linux.h Normal file
View File

@ -0,0 +1,128 @@
/* Definitions of target machine for GNU compiler. System/370 version.
Copyright (C) 1989, 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by Jan Stein (jan@cd.chalmers.se).
Modified for Linux/390 by Linas Vepstas (linas@linas.org)
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. */
#define TARGET_VERSION fprintf (stderr, " (i370 GNU/Linux with ELF)");
/* Specify that we're generating code for a Linux port to 370 */
#define TARGET_ELF_ABI
#define LINUX_DEFAULT_ELF
/* hack alert define to get dbx/gdb/dwarf to compile */
/* problem is that host float format is not target float format. */
/* define REAL_ARITHMETIC for software emulation of float to
* int conversion. This seems to have somethings to do with
* cross-compiling ... */
#define REAL_ARITHMETIC
/* Include system common definitions */
#include "config/linux.h"
#include "config/i370/i370.h"
/* Names to predefine in the preprocessor for this target machine. */
#undef CPP_PREDEFINES
#define CPP_PREDEFINES "-DGCC -Dgcc -D__ELF__ -Dunix -Dlinux -Asystem(posix) -Acpu(i370) -Amachine(i370)"
/* Options for this target machine. */
#define LIBGCC_SPEC "libgcc.a%s"
#ifdef SOME_FUTURE_DAY
#define CPP_SPEC "%{posix: -D_POSIX_SOURCE} %(cpp_sysv) %(cpp_endian_big) \
%{mcall-linux: %(cpp_os_linux) } \
%{!mcall-linux: %(cpp_os_default) }"
#define LIB_SPEC "\
%{mcall-linux: %(lib_linux) } \
%{!mcall-linux:%(lib_default) }"
#define STARTFILE_SPEC "\
%{mcall-linux: %(startfile_linux) } \
%{!mcall-linux: %(startfile_default) }"
#define ENDFILE_SPEC "\
%{mcall-linux: %(endfile_linux) } \
%{!mcall-linux: %(endfile_default) }"
/* GNU/Linux support. */
#ifndef LIB_LINUX_SPEC
#define LIB_LINUX_SPEC "%{mnewlib: --start-group -llinux -lc --end-group } %{!mnewlib: -lc }"
#endif
#ifndef STARTFILE_LINUX_SPEC
#define STARTFILE_LINUX_SPEC "\
%{!shared: %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}} \
%{mnewlib: ecrti.o%s} \
%{!mnewlib: crti.o%s %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}"
#endif
#ifndef ENDFILE_LINUX_SPEC
#define ENDFILE_LINUX_SPEC "\
%{mnewlib: ecrtn.o%s} \
%{!mnewlib: %{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s}"
#endif
#ifndef LINK_START_LINUX_SPEC
#define LINK_START_LINUX_SPEC "-Ttext 0x10000"
#endif
#ifndef LINK_OS_LINUX_SPEC
#define LINK_OS_LINUX_SPEC ""
#endif
#ifndef CPP_OS_LINUX_SPEC
#define CPP_OS_LINUX_SPEC "-D__unix__ -D__linux__ \
%{!ansi: -Dunix -Dlinux } \
-Asystem(unix) -Asystem(linux)"
#endif
#ifndef CPP_OS_LINUX_SPEC
#define CPP_OS_LINUX_SPEC ""
#endif
/* Define any extra SPECS that the compiler needs to generate. */
#undef SUBTARGET_EXTRA_SPECS
#define SUBTARGET_EXTRA_SPECS \
{ "lib_linux", LIB_LINUX_SPEC }, \
{ "lib_default", LIB_DEFAULT_SPEC }, \
{ "startfile_linux", STARTFILE_LINUX_SPEC }, \
{ "startfile_default", STARTFILE_DEFAULT_SPEC }, \
{ "endfile_linux", ENDFILE_LINUX_SPEC }, \
{ "endfile_default", ENDFILE_DEFAULT_SPEC }, \
{ "link_shlib", LINK_SHLIB_SPEC }, \
{ "link_target", LINK_TARGET_SPEC }, \
{ "link_start", LINK_START_SPEC }, \
{ "link_start_linux", LINK_START_LINUX_SPEC }, \
{ "link_os", LINK_OS_SPEC }, \
{ "link_os_linux", LINK_OS_LINUX_SPEC }, \
{ "link_os_default", LINK_OS_DEFAULT_SPEC }, \
{ "cpp_endian_big", CPP_ENDIAN_BIG_SPEC }, \
{ "cpp_os_linux", CPP_OS_LINUX_SPEC }, \
{ "cpp_os_default", CPP_OS_DEFAULT_SPEC },
#endif /* SOME_FUTURE_DAY */

46
gcc/config/i370/mvs.h Normal file
View File

@ -0,0 +1,46 @@
/* Definitions of target machine for GNU compiler. System/370 version.
Copyright (C) 1989, 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by Jan Stein (jan@cd.chalmers.se).
Modified for OS/390 LanguageEnvironment C by Dave Pitts (dpitts@cozx.com)
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. */
#define TARGET_VERSION printf (" (370/MVS)");
/* Specify that we're generating code for the Language Environment */
#define LE370 1
#define TARGET_EBCDIC 1
#define TARGET_HLASM 1
/* Options for the preprocessor for this target machine. */
#define CPP_SPEC "-trigraphs"
/* Names to predefine in the preprocessor for this target machine. */
#if defined(LE370)
#define CPP_PREDEFINES "-DGCC -Dgcc -DMVS -Dmvs -DLE370 -Asystem(mvs) -Acpu(i370) -Amachine(i370)"
#else
#define CPP_PREDEFINES "-DGCC -Dgcc -DMVS -Dmvs -Asystem(mvs) -Acpu(i370) -Amachine(i370)"
#endif
/* Include system common definitions */
#include "config/i370/i370.h"

45
gcc/config/i370/oe.h Normal file
View File

@ -0,0 +1,45 @@
/* Definitions of target machine for GNU compiler. System/370 version.
Copyright (C) 1989, 1993, 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by Jan Stein (jan@cd.chalmers.se).
Modified for OS/390 OpenEdition by Dave Pitts (dpitts@cozx.com)
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. */
#define TARGET_VERSION printf (" (370/OpenEdition)");
/* Specify that we're generating code for the Language Environment */
#define LE370 1
#define LONGEXTERNAL 1
#define TARGET_EBCDIC 1
#define TARGET_HLASM 1
/* Options for this target machine. */
#define LIB_SPEC ""
#define LIBGCC_SPEC ""
#define STARTFILE_SPEC "/usr/local/lib/gccmain.o"
/* Names to predefine in the preprocessor for this target machine. */
#define CPP_PREDEFINES "-DGCC -Dgcc -DUNIX -Dunix -Dopenedition -D__i370__ -Asystem(openedition) -Asystem(unix) -Acpu(i370) -Amachine(i370)"
/* Include system common definitions */
#include "config/i370/i370.h"

4
gcc/config/i370/t-linux Normal file
View File

@ -0,0 +1,4 @@
# config/i370/t-linux: this file defines Makefile overrides when building
# for a Linux target. Thes definitions are in addition to config/t-linux.
# pretty busted at the moment
CROSS_LIBGCC1 =

4
gcc/config/i370/t-mvs Normal file
View File

@ -0,0 +1,4 @@
# There is no libgcc for mvs
LIBGCC =
INSTALL_LIBGCC =
LIBGCC1_TEST =

4
gcc/config/i370/t-oe Normal file
View File

@ -0,0 +1,4 @@
# There is no libgcc for OpenEdition
LIBGCC =
INSTALL_LIBGCC =
LIBGCC1_TEST =

26
gcc/config/i370/x-oe Normal file
View File

@ -0,0 +1,26 @@
#
# Host is an i370 running OpenEdition
#
# Use GCC alloca
ALLOCA = alloca.o
# Don't bother fixing up header files, they're wierd
STMP_FIXPROTO =
# Set up to make using c89
X_CFLAGS=-D_ALL_SOURCE
CC=c89
# Explicitly use libiberty
CLIB=-liberty
LDFLAGS=-L../libiberty
# TAR Options
TAROUTOPTS=xpf

View File

@ -0,0 +1,67 @@
/* Configuration for GNU C-compiler for System/370.
Copyright (C) 1989, 1993, 1997 Free Software Foundation, Inc.
Contributed by Jan Stein (jan@cd.chalmers.se).
Modified for OS/390 OpenEdition by Dave Pitts (dpitts@cozx.com)
Modified for 390/Linux by Linas Vepstas (linas@linas.org)
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. */
/* #defines that need visibility everywhere. */
#define FALSE 0
#define TRUE 1
#define USE_STDARGS 1
#define USE_PROTOTYPES 1
/* This describes the machine the compiler is hosted on. */
#define HOST_BITS_PER_CHAR 8
#define HOST_BITS_PER_SHORT 16
#define HOST_BITS_PER_INT 32
#define HOST_BITS_PER_LONG 32
#define HOST_BITS_PER_LONGLONG 64
#define HOST_FLOAT_FORMAT IEEE_FLOAT_FORMAT
#define HOST_WORDS_BIG_ENDIAN
/* If not compiled with GNU C, use the C alloca and use only int bitfields. */
#ifndef __GNUC__
#define USE_C_ALLOCA
#if __STDC__
extern void *alloca ();
#else
extern char *alloca ();
#endif
#define ONLY_INT_FIELDS
#endif
// #define USG
/* Target machine dependencies. tm.h is a symbolic link to the actual
target specific file. */
#include "tm.h"
/* Arguments to use with `exit'. */
#define SUCCESS_EXIT_CODE 0
#define FATAL_EXIT_CODE 12
// #define NO_DBX_FORMAT

53
gcc/config/i370/xm-mvs.h Normal file
View File

@ -0,0 +1,53 @@
/* Configuration for GNU C-compiler for System/370.
Copyright (C) 1989, 1993, 1997 Free Software Foundation, Inc.
Contributed by Jan Stein (jan@cd.chalmers.se).
Modified for OS/390 LanguageEnvironment C by Dave Pitts (dpitts@cozx.com)
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. */
/* #defines that need visibility everywhere. */
#define FALSE 0
#define TRUE 1
/* This describes the machine the compiler is hosted on. */
#define HOST_BITS_PER_CHAR 8
#define HOST_BITS_PER_SHORT 16
#define HOST_BITS_PER_INT 32
#define HOST_BITS_PER_LONG 32
#define HOST_FLOAT_FORMAT IBM_FLOAT_FORMAT
#define HOST_EBCDIC 1
#define USG
#ifndef MVS
#define MVS
#endif
/* Target machine dependencies. tm.h is a symbolic link to the actual
target specific file. */
#include "tm.h"
/* Arguments to use with `exit'. */
#define SUCCESS_EXIT_CODE 0
#define FATAL_EXIT_CODE 12
#define NO_DBX_FORMAT

55
gcc/config/i370/xm-oe.h Normal file
View File

@ -0,0 +1,55 @@
/* Configuration for GNU C-compiler for System/370.
Copyright (C) 1989, 1993, 1997 Free Software Foundation, Inc.
Contributed by Jan Stein (jan@cd.chalmers.se).
Modified for OS/390 OpenEdition by Dave Pitts (dpitts@cozx.com)
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. */
/* #defines that need visibility everywhere. */
#define FALSE 0
#define TRUE 1
#define USE_STDARGS 1
#define USE_PROTOTYPES 1
/* This describes the machine the compiler is hosted on. */
#define HOST_BITS_PER_CHAR 8
#define HOST_BITS_PER_SHORT 16
#define HOST_BITS_PER_INT 32
#define HOST_BITS_PER_LONG 32
#define HOST_FLOAT_FORMAT IBM_FLOAT_FORMAT
#define HOST_EBCDIC 1
#define ONLY_INT_FIELDS 1
#define USG
/* Target machine dependencies. tm.h is a symbolic link to the actual
target specific file. */
#include "tm.h"
/* Arguments to use with `exit'. */
#define SUCCESS_EXIT_CODE 0
#define FATAL_EXIT_CODE 12
#define NO_DBX_FORMAT