summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authoruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>2003-06-30 19:47:22 +0000
committeruweigand <uweigand@138bc75d-0d04-0410-961f-82ee72b054a4>2003-06-30 19:47:22 +0000
commitb8c0043c7dc2199bf35c99ecf874cde086c2c3d5 (patch)
treed7081e2edcaaae25aaa2c0cdc2115d8f8931eae5 /gcc
parent53b2c31f6465e5c1c65a2e046b9673dcc72691cd (diff)
downloadgcc-b8c0043c7dc2199bf35c99ecf874cde086c2c3d5.tar.gz
* config.gcc [s390*-*-*]: Support --with-arch, --with-tune, and
--with-mode configure options. * config/s390/s390.h (OPTION_DEFAULT_SPECS): Define. (DRIVER_SELF_SPECS): Define. * config/s390/linux.h (ASM_SPEC): Pass architecture mode and cpu architecture to assembler. (LINK_SPEC): Merge 31-bit and 64-bit variants. (LINK_ARCH31_SPEC, LINK_ARCH64_SPEC, EXTRA_SPECS): Remove. * config/s390/s390.c (override_options): New default rules for architecture mode and cpu architecture selection. * doc/invoke.texi (-mesa, -mzarch, -march, -mtune): Document new default rules. * config/s390/s390.h (enum processor_type): Add PROCESSOR_2084_Z990. * config/s390/s390.md (attr "cpu"): Add "z990" processor type. * config/s390/s390.c (override_options): Add "z990" to processor_alias_table. * doc/invoke.texi (-march): Document "z990" processor type. * config/s390/s390.c (s390_tune_flags, s390_arch_flags): New variables. * config/s390/s390.h (s390_tune_flags, s390_arch_flags): Declare. (enum processor_flags, TARGET_CPU_IEEE_FLOAT, TARGET_CPU_ZARCH, TARGET_CPU_LONG_DISPLACEMENT, TARGET_LONG_DISPLACEMENT): New. * config/s390/s390.c (override_options): Replace enum pta_flags by enum processor_flags. Fill in s390_tune_flags and s390_arch_flags. * config/s390/s390.c (s390_cpu): Rename to ... (s390_tune): ... this. * config/s390/s390.h (s390_cpu, s390_tune): Likewise. * config/s390/s390.c (s390_issue_rate, override_options): Likewise. * config/s390/s390.md (attr "cpu"): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@68736 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog34
-rw-r--r--gcc/config.gcc31
-rw-r--r--gcc/config/s390/linux.h41
-rw-r--r--gcc/config/s390/s390.c97
-rw-r--r--gcc/config/s390/s390.h45
-rw-r--r--gcc/config/s390/s390.md4
-rw-r--r--gcc/doc/invoke.texi21
7 files changed, 173 insertions, 100 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index b94a8713fe1..08be63ed9f5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,37 @@
+2003-06-30 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * config.gcc [s390*-*-*]: Support --with-arch, --with-tune, and
+ --with-mode configure options.
+ * config/s390/s390.h (OPTION_DEFAULT_SPECS): Define.
+ (DRIVER_SELF_SPECS): Define.
+ * config/s390/linux.h (ASM_SPEC): Pass architecture mode and cpu
+ architecture to assembler.
+ (LINK_SPEC): Merge 31-bit and 64-bit variants.
+ (LINK_ARCH31_SPEC, LINK_ARCH64_SPEC, EXTRA_SPECS): Remove.
+ * config/s390/s390.c (override_options): New default rules for
+ architecture mode and cpu architecture selection.
+ * doc/invoke.texi (-mesa, -mzarch, -march, -mtune): Document
+ new default rules.
+
+ * config/s390/s390.h (enum processor_type): Add PROCESSOR_2084_Z990.
+ * config/s390/s390.md (attr "cpu"): Add "z990" processor type.
+ * config/s390/s390.c (override_options): Add "z990" to
+ processor_alias_table.
+ * doc/invoke.texi (-march): Document "z990" processor type.
+
+ * config/s390/s390.c (s390_tune_flags, s390_arch_flags): New variables.
+ * config/s390/s390.h (s390_tune_flags, s390_arch_flags): Declare.
+ (enum processor_flags, TARGET_CPU_IEEE_FLOAT, TARGET_CPU_ZARCH,
+ TARGET_CPU_LONG_DISPLACEMENT, TARGET_LONG_DISPLACEMENT): New.
+ * config/s390/s390.c (override_options): Replace enum pta_flags by
+ enum processor_flags. Fill in s390_tune_flags and s390_arch_flags.
+
+ * config/s390/s390.c (s390_cpu): Rename to ...
+ (s390_tune): ... this.
+ * config/s390/s390.h (s390_cpu, s390_tune): Likewise.
+ * config/s390/s390.c (s390_issue_rate, override_options): Likewise.
+ * config/s390/s390.md (attr "cpu"): Likewise.
+
2003-06-30 Neil Booth <neil@daikokuya.co.uk>
* c-common.c (enum c_language_kind, flag_objc): Remove.
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 78e20e659f5..688604cda32 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -2444,6 +2444,35 @@ then
done
;;
+ s390*-*-*)
+ supported_defaults="arch mode tune"
+
+ for which in arch tune; do
+ eval "val=\$with_$which"
+ case x$val in
+ x \
+ | xg5 | xg6 | xz900 | xz990)
+ # OK
+ ;;
+ *)
+ echo "Unknown cpu used in --with-$which=$val." 1>&2
+ exit 1
+ ;;
+ esac
+ done
+
+ case "x$with_mode" in
+ x \
+ | xesa | xzarch)
+ # OK
+ ;;
+ *)
+ echo "Unknown architecture mode used in --with-mode=$with_mode." 1>&2
+ exit 1
+ ;;
+ esac
+ ;;
+
sparc*-*-*)
supported_defaults="cpu float tune"
@@ -2608,7 +2637,7 @@ then
esac
t=
- all_defaults="abi cpu arch tune schedule float"
+ all_defaults="abi cpu arch tune schedule float mode"
for option in $all_defaults
do
eval "val=\$with_$option"
diff --git a/gcc/config/s390/linux.h b/gcc/config/s390/linux.h
index 83c8247e2f3..511ede559df 100644
--- a/gcc/config/s390/linux.h
+++ b/gcc/config/s390/linux.h
@@ -69,13 +69,8 @@ Boston, MA 02111-1307, USA. */
/* Target specific assembler settings. */
-#ifdef DEFAULT_TARGET_64BIT
-#undef ASM_SPEC
-#define ASM_SPEC "%{m31:-m31 -Aesa}"
-#else
#undef ASM_SPEC
-#define ASM_SPEC "%{m64:-m64 -Aesame}"
-#endif
+#define ASM_SPEC "%{m31&m64}%{mesa&mzarch}%{march=*}"
/* Target specific linker settings. */
@@ -86,40 +81,18 @@ Boston, MA 02111-1307, USA. */
#define MULTILIB_DEFAULTS { "m31" }
#endif
-#define LINK_ARCH31_SPEC \
- "-m elf_s390 \
- %{shared:-shared} \
- %{!shared: \
- %{static:-static} \
- %{!static: \
- %{rdynamic:-export-dynamic} \
- %{!dynamic-linker:-dynamic-linker /lib/ld.so.1}}}"
-
-#define LINK_ARCH64_SPEC \
- "-m elf64_s390 \
+#undef LINK_SPEC
+#define LINK_SPEC \
+ "%{m31:-m elf_s390}%{m64:-m elf64_s390} \
%{shared:-shared} \
%{!shared: \
%{static:-static} \
%{!static: \
%{rdynamic:-export-dynamic} \
- %{!dynamic-linker:-dynamic-linker /lib/ld64.so.1}}}"
-
-#ifdef DEFAULT_TARGET_64BIT
-#undef LINK_SPEC
-#define LINK_SPEC "%{m31:%(link_arch31)} %{!m31:%(link_arch64)}"
-#else
-#undef LINK_SPEC
-#define LINK_SPEC "%{m64:%(link_arch64)} %{!m64:%(link_arch31)}"
-#endif
-
-
-/* This macro defines names of additional specifications to put in the specs
- that can be used in various specifications like CC1_SPEC. Its definition
- is an initializer with a subgrouping for each command option. */
+ %{!dynamic-linker: \
+ %{m31:-dynamic-linker /lib/ld.so.1} \
+ %{m64:-dynamic-linker /lib/ld64.so.1}}}}"
-#define EXTRA_SPECS \
- { "link_arch31", LINK_ARCH31_SPEC }, \
- { "link_arch64", LINK_ARCH64_SPEC }, \
#define TARGET_ASM_FILE_END file_end_indicate_exec_stack
diff --git a/gcc/config/s390/s390.c b/gcc/config/s390/s390.c
index dc02d229153..7e26ecf661f 100644
--- a/gcc/config/s390/s390.c
+++ b/gcc/config/s390/s390.c
@@ -157,9 +157,11 @@ struct s390_address
};
/* Which cpu are we tuning for. */
-enum processor_type s390_cpu;
+enum processor_type s390_tune;
+enum processor_flags s390_tune_flags;
/* Which instruction set architecture to use. */
enum processor_type s390_arch;
+enum processor_flags s390_arch_flags;
/* Strings to hold which cpu and instruction set architecture to use. */
const char *s390_tune_string; /* for -mtune=<xxx> */
@@ -925,22 +927,19 @@ void
override_options ()
{
int i;
- static const char * const cpu_names[] = TARGET_CPU_DEFAULT_NAMES;
static struct pta
{
const char *const name; /* processor name or nickname. */
const enum processor_type processor;
- const enum pta_flags
- {
- PTA_IEEE_FLOAT = 1,
- PTA_ZARCH = 2
- } flags;
+ const enum processor_flags flags;
}
const processor_alias_table[] =
{
- {"g5", PROCESSOR_9672_G5, PTA_IEEE_FLOAT},
- {"g6", PROCESSOR_9672_G6, PTA_IEEE_FLOAT},
- {"z900", PROCESSOR_2064_Z900, PTA_IEEE_FLOAT | PTA_ZARCH},
+ {"g5", PROCESSOR_9672_G5, PF_IEEE_FLOAT},
+ {"g6", PROCESSOR_9672_G6, PF_IEEE_FLOAT},
+ {"z900", PROCESSOR_2064_Z900, PF_IEEE_FLOAT | PF_ZARCH},
+ {"z990", PROCESSOR_2084_Z990, PF_IEEE_FLOAT | PF_ZARCH
+ | PF_LONG_DISPLACEMENT},
};
int const pta_size = ARRAY_SIZE (processor_alias_table);
@@ -950,59 +949,55 @@ override_options ()
/* Set up function hooks. */
init_machine_status = s390_init_machine_status;
-
- /* Set cpu and arch, if only partially given. */
- if (!s390_tune_string && s390_arch_string)
- s390_tune_string = s390_arch_string;
- if (!s390_tune_string)
- s390_tune_string = cpu_names [TARGET_64BIT ? TARGET_CPU_DEFAULT_2064
- : TARGET_CPU_DEFAULT_9672];
+
+ /* Architecture mode defaults according to ABI. */
+ if (!(target_flags_explicit & MASK_ZARCH))
+ {
+ if (TARGET_64BIT)
+ target_flags |= MASK_ZARCH;
+ else
+ target_flags &= ~MASK_ZARCH;
+ }
+
+ /* Determine processor architectural level. */
if (!s390_arch_string)
-#ifdef DEFAULT_TARGET_64BIT
- s390_arch_string = "z900";
-#else
- s390_arch_string = "g5";
-#endif
+ s390_arch_string = TARGET_ZARCH? "z900" : "g5";
for (i = 0; i < pta_size; i++)
if (! strcmp (s390_arch_string, processor_alias_table[i].name))
{
s390_arch = processor_alias_table[i].processor;
- /* Default cpu tuning to the architecture. */
- s390_cpu = s390_arch;
-
- if (!(processor_alias_table[i].flags & PTA_ZARCH)
- && TARGET_64BIT)
- error ("64-bit ABI not supported on %s", s390_arch_string);
-
- if (!(processor_alias_table[i].flags & PTA_ZARCH)
- && TARGET_ZARCH)
- error ("z/Architecture not supported on %s", s390_arch_string);
-
+ s390_arch_flags = processor_alias_table[i].flags;
break;
}
-
if (i == pta_size)
- error ("bad value (%s) for -march= switch", s390_arch_string);
+ error ("Unknown cpu used in -march=%s.", s390_arch_string);
- /* ESA implies 31 bit mode. */
- if ((target_flags_explicit & MASK_ZARCH) && !TARGET_ZARCH)
+ /* Determine processor to tune for. */
+ if (!s390_tune_string)
{
- if ((target_flags_explicit & MASK_64BIT) && TARGET_64BIT)
- error ("64-bit ABI not possible in ESA/390 mode");
- else
- target_flags &= ~MASK_64BIT;
+ s390_tune = s390_arch;
+ s390_tune_flags = s390_arch_flags;
+ s390_tune_string = s390_arch_string;
+ }
+ else
+ {
+ for (i = 0; i < pta_size; i++)
+ if (! strcmp (s390_tune_string, processor_alias_table[i].name))
+ {
+ s390_tune = processor_alias_table[i].processor;
+ s390_tune_flags = processor_alias_table[i].flags;
+ break;
+ }
+ if (i == pta_size)
+ error ("Unknown cpu used in -mtune=%s.", s390_tune_string);
}
- for (i = 0; i < pta_size; i++)
- if (! strcmp (s390_tune_string, processor_alias_table[i].name))
- {
- s390_cpu = processor_alias_table[i].processor;
- break;
- }
-
- if (i == pta_size)
- error ("bad value (%s) for -mtune= switch", s390_tune_string);
+ /* Sanity checks. */
+ if (TARGET_ZARCH && !(s390_arch_flags & PF_ZARCH))
+ error ("z/Architecture mode not supported on %s.", s390_arch_string);
+ if (TARGET_64BIT && !TARGET_ZARCH)
+ error ("64-bit ABI not supported in ESA/390 mode.");
}
/* Map for smallest class containing reg regno. */
@@ -3707,7 +3702,7 @@ s390_issue_rate ()
static int
s390_use_dfa_pipeline_interface ()
{
- if (s390_cpu == PROCESSOR_2064_Z900)
+ if (s390_tune == PROCESSOR_2064_Z900)
return 1;
return 0;
diff --git a/gcc/config/s390/s390.h b/gcc/config/s390/s390.h
index 7848d7d971f..70128864d59 100644
--- a/gcc/config/s390/s390.h
+++ b/gcc/config/s390/s390.h
@@ -37,19 +37,37 @@ enum processor_type
PROCESSOR_9672_G5,
PROCESSOR_9672_G6,
PROCESSOR_2064_Z900,
+ PROCESSOR_2084_Z990,
PROCESSOR_max
};
-extern enum processor_type s390_cpu;
+/* Optional architectural facilities supported by the processor. */
+
+enum processor_flags
+{
+ PF_IEEE_FLOAT = 1,
+ PF_ZARCH = 2,
+ PF_LONG_DISPLACEMENT = 4
+};
+
+extern enum processor_type s390_tune;
+extern enum processor_flags s390_tune_flags;
extern const char *s390_tune_string;
extern enum processor_type s390_arch;
+extern enum processor_flags s390_arch_flags;
extern const char *s390_arch_string;
-#define TARGET_CPU_DEFAULT_9672 0
-#define TARGET_CPU_DEFAULT_2064 2
+#define TARGET_CPU_IEEE_FLOAT \
+ (s390_arch_flags & PF_IEEE_FLOAT)
+#define TARGET_CPU_ZARCH \
+ (s390_arch_flags & PF_ZARCH)
+#define TARGET_CPU_LONG_DISPLACEMENT \
+ (s390_arch_flags & PF_LONG_DISPLACEMENT)
+
+#define TARGET_LONG_DISPLACEMENT \
+ (TARGET_ZARCH && TARGET_CPU_LONG_DISPLACEMENT)
-#define TARGET_CPU_DEFAULT_NAMES {"g5", "g6", "z900"}
/* Run-time target specification. */
@@ -119,6 +137,25 @@ extern int target_flags;
N_("Generate code for given CPU"), 0}, \
}
+/* Support for configure-time defaults. */
+#define OPTION_DEFAULT_SPECS \
+ { "mode", "%{!mesa:%{!mzarch:-m%(VALUE)}}" }, \
+ { "arch", "%{!march=*:-march=%(VALUE)}" }, \
+ { "tune", "%{!mtune=*:-mtune=%(VALUE)}" }
+
+/* Defaulting rules. */
+#ifdef DEFAULT_TARGET_64BIT
+#define DRIVER_SELF_SPECS \
+ "%{!m31:%{!m64:-m64}}", \
+ "%{!mesa:%{!mzarch:%{m31:-mesa}%{m64:-mzarch}}}", \
+ "%{!march=*:%{mesa:-march=g5}%{mzarch:-march=z900}}"
+#else
+#define DRIVER_SELF_SPECS \
+ "%{!m31:%{!m64:-m31}}", \
+ "%{!mesa:%{!mzarch:%{m31:-mesa}%{m64:-mzarch}}}", \
+ "%{!march=*:%{mesa:-march=g5}%{mzarch:-march=z900}}"
+#endif
+
/* Target version string. Overridden by the OS header. */
#ifdef DEFAULT_TARGET_64BIT
#define TARGET_VERSION fprintf (stderr, " (zSeries)");
diff --git a/gcc/config/s390/s390.md b/gcc/config/s390/s390.md
index b5a222be126..d061d084833 100644
--- a/gcc/config/s390/s390.md
+++ b/gcc/config/s390/s390.md
@@ -76,8 +76,8 @@
;; Processor type. This attribute must exactly match the processor_type
;; enumeration in s390.h.
-(define_attr "cpu" "g5,g6,z900"
- (const (symbol_ref "s390_cpu")))
+(define_attr "cpu" "g5,g6,z900,z990"
+ (const (symbol_ref "s390_tune")))
;; Define an insn type attribute. This is used in function unit delay
;; computations.
diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi
index a751d8e419f..184a2d2ed2a 100644
--- a/gcc/doc/invoke.texi
+++ b/gcc/doc/invoke.texi
@@ -10134,8 +10134,9 @@ instructions available on z/Architecture.
When @option{-mesa} is specified, generate code using the
instructions available on ESA/390. Note that @option{-mesa} is
not possible with @option{-m64}.
-For the @samp{s390} targets, the default is @option{-mesa},
-while the @samp{s390x} targets default to @option{-mzarch}.
+When generating code compliant to the Linux for S/390 ABI,
+the default is @option{-mesa}. When generating code compliant
+to the Linux for zSeries ABI, the default is @option{-mzarch}.
@item -mmvcle
@itemx -mno-mvcle
@@ -10152,17 +10153,21 @@ use a @code{mvc} loop instead. This is the default.
Print (or do not print) additional debug information when compiling.
The default is to not print debug information.
-@item -march=@var{arch}
+@item -march=@var{cpu-type}
@opindex march
-Generate code that will run on @var{arch}, which is the name of system
+Generate code that will run on @var{cpu-type}, which is the name of a system
representing a certain processor type. Possible values for
-@var{cpu-type} are @samp{g5}, @samp{g6} and @samp{z900}.
+@var{cpu-type} are @samp{g5}, @samp{g6}, @samp{z900}, and @samp{z990}.
+When generating code using the instructions available on z/Architecture,
+the default is @option{-march=z900}. Otherwise, the default is
+@option{-march=g5}.
-@item -mtune=@var{arch}
+@item -mtune=@var{cpu-type}
@opindex mtune
Tune to @var{cpu-type} everything applicable about the generated code,
- except for the ABI and the set of available instructions.
-The list of @var{arch} values is the same as for @option{-march}.
+except for the ABI and the set of available instructions.
+The list of @var{cpu-type} values is the same as for @option{-march}.
+The default is the value used for @option{-march}.
@end table