S390: Support -mtune=native and -march=native.
gcc/ChangeLog 2015-06-01 Dominik Vogt <vogt@linux.vnet.ibm.com> * config/s390/driver-native.c: New file. * config/s390/x-native: New file. * config.host: Add new files for s390. * config/s390/s390.h (DRIVER_SELF_SPECS): Add support for -mtune=native and -march=native * config.gcc: Likewise. * config/s390/s390.opt (march): Likewise; add PROCESSOR_NATIVE * config/s390/s390-opts.h (enum processor_type): Ditto. * config/s390/s390.c (s390_option_override): Catch unhandled PROCESSOR_NATIVE From-SVN: r223934
This commit is contained in:
parent
a48b05f911
commit
cb0edc3993
9 changed files with 130 additions and 3 deletions
|
@ -1,3 +1,16 @@
|
|||
2015-06-01 Dominik Vogt <vogt@linux.vnet.ibm.com>
|
||||
|
||||
* config/s390/driver-native.c: New file.
|
||||
* config/s390/x-native: New file.
|
||||
* config.host: Add new files for s390.
|
||||
* config/s390/s390.h (DRIVER_SELF_SPECS): Add support for -mtune=native
|
||||
and -march=native
|
||||
* config.gcc: Likewise.
|
||||
* config/s390/s390.opt (march): Likewise; add PROCESSOR_NATIVE
|
||||
* config/s390/s390-opts.h (enum processor_type): Ditto.
|
||||
* config/s390/s390.c (s390_option_override): Catch unhandled
|
||||
PROCESSOR_NATIVE
|
||||
|
||||
2015-06-01 Ilya Enkovich <ilya.enkovich@intel.com>
|
||||
|
||||
PR target/65527
|
||||
|
|
|
@ -4099,7 +4099,7 @@ case "${target}" in
|
|||
for which in arch tune; do
|
||||
eval "val=\$with_$which"
|
||||
case ${val} in
|
||||
"" | g5 | g6 | z900 | z990 | z9-109 | z9-ec | z10 | z196 | zEC12 | z13)
|
||||
"" | native | g5 | g6 | z900 | z990 | z9-109 | z9-ec | z10 | z196 | zEC12 | z13)
|
||||
# OK
|
||||
;;
|
||||
*)
|
||||
|
|
|
@ -172,6 +172,10 @@ case ${host} in
|
|||
;;
|
||||
esac
|
||||
;;
|
||||
s390-*-* | s390x-*-*)
|
||||
host_extra_gcc_objs="driver-native.o"
|
||||
host_xmake_file="${host_xmake_file} s390/x-native"
|
||||
;;
|
||||
sparc*-*-solaris2*)
|
||||
case ${target} in
|
||||
sparc*-*-solaris2*)
|
||||
|
|
91
gcc/config/s390/driver-native.c
Normal file
91
gcc/config/s390/driver-native.c
Normal file
|
@ -0,0 +1,91 @@
|
|||
/* Subroutines for the gcc driver.
|
||||
Copyright (C) 2015 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 3, 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 COPYING3. If not see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
#include "config.h"
|
||||
#include "system.h"
|
||||
#include "coretypes.h"
|
||||
#include "tm.h"
|
||||
|
||||
/* This will be called by the spec parser in gcc.c when it sees
|
||||
a %:local_cpu_detect(args) construct. Currently it will be called
|
||||
with either "arch" or "tune" as argument depending on if -march=native
|
||||
or -mtune=native is to be substituted.
|
||||
|
||||
It returns a string containing new command line parameters to be
|
||||
put at the place of the above two options, depending on what CPU
|
||||
this is executed. E.g. "-march=zEC12" on a zEC12 for -march=native.
|
||||
If the routine can't detect a known processor, the -march or -mtune
|
||||
option is discarded.
|
||||
|
||||
ARGC and ARGV are set depending on the actual arguments given
|
||||
in the spec. */
|
||||
const char *
|
||||
s390_host_detect_local_cpu (int argc, const char **argv)
|
||||
{
|
||||
const char *cpu = NULL;
|
||||
char buf[256];
|
||||
FILE *f;
|
||||
bool arch;
|
||||
|
||||
if (argc < 1)
|
||||
return NULL;
|
||||
|
||||
arch = strcmp (argv[0], "arch") == 0;
|
||||
if (!arch && strcmp (argv[0], "tune"))
|
||||
return NULL;
|
||||
|
||||
f = fopen ("/proc/cpuinfo", "r");
|
||||
if (f == NULL)
|
||||
return NULL;
|
||||
|
||||
while (fgets (buf, sizeof (buf), f) != NULL)
|
||||
if (strncmp (buf, "processor", sizeof ("processor") - 1) == 0)
|
||||
{
|
||||
if (strstr (buf, "machine = 9672") != NULL)
|
||||
cpu = "g5";
|
||||
else if (strstr (buf, "machine = 2064") != NULL
|
||||
|| strstr (buf, "machine = 2066") != NULL)
|
||||
cpu = "z900";
|
||||
else if (strstr (buf, "machine = 2084") != NULL
|
||||
|| strstr (buf, "machine = 2086") != NULL)
|
||||
cpu = "z990";
|
||||
else if (strstr (buf, "machine = 2094") != NULL
|
||||
|| strstr (buf, "machine = 2096") != NULL)
|
||||
cpu = "z9-109";
|
||||
else if (strstr (buf, "machine = 2097") != NULL
|
||||
|| strstr (buf, "machine = 2098") != NULL)
|
||||
cpu = "z10";
|
||||
else if (strstr (buf, "machine = 2817") != NULL
|
||||
|| strstr (buf, "machine = 2818") != NULL)
|
||||
cpu = "z196";
|
||||
else if (strstr (buf, "machine = 2827") != NULL
|
||||
|| strstr (buf, "machine = 2828") != NULL)
|
||||
cpu = "zEC12";
|
||||
else if (strstr (buf, "machine = 2964") != NULL)
|
||||
cpu = "z13";
|
||||
break;
|
||||
}
|
||||
|
||||
fclose (f);
|
||||
|
||||
if (cpu == NULL)
|
||||
return NULL;
|
||||
|
||||
return concat ("-m", argv[0], "=", cpu, NULL);
|
||||
}
|
|
@ -36,6 +36,7 @@ enum processor_type
|
|||
PROCESSOR_2817_Z196,
|
||||
PROCESSOR_2827_ZEC12,
|
||||
PROCESSOR_2964_Z13,
|
||||
PROCESSOR_NATIVE,
|
||||
PROCESSOR_max
|
||||
};
|
||||
|
||||
|
|
|
@ -13345,6 +13345,8 @@ s390_option_override (void)
|
|||
}
|
||||
|
||||
/* Sanity checks. */
|
||||
if (s390_arch == PROCESSOR_NATIVE || s390_tune == PROCESSOR_NATIVE)
|
||||
gcc_unreachable ();
|
||||
if (TARGET_ZARCH && !TARGET_CPU_ZARCH)
|
||||
error ("z/Architecture mode not supported on %s", s390_arch_string);
|
||||
if (TARGET_64BIT && !TARGET_ZARCH)
|
||||
|
|
|
@ -126,17 +126,27 @@ enum processor_flags
|
|||
{ "arch", "%{!march=*:-march=%(VALUE)}" }, \
|
||||
{ "tune", "%{!mtune=*:-mtune=%(VALUE)}" }
|
||||
|
||||
extern const char *s390_host_detect_local_cpu (int argc, const char **argv);
|
||||
# define EXTRA_SPEC_FUNCTIONS \
|
||||
{ "local_cpu_detect", s390_host_detect_local_cpu },
|
||||
|
||||
# define MARCH_MTUNE_NATIVE_SPECS \
|
||||
" %{march=native:%<march=native %:local_cpu_detect(arch)}" \
|
||||
" %{mtune=native:%<mtune=native %:local_cpu_detect(tune)}"
|
||||
|
||||
/* 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}}"
|
||||
"%{!march=*:%{mesa:-march=g5}%{mzarch:-march=z900}}", \
|
||||
MARCH_MTUNE_NATIVE_SPECS
|
||||
#else
|
||||
#define DRIVER_SELF_SPECS \
|
||||
"%{!m31:%{!m64:-m31}}", \
|
||||
"%{!mesa:%{!mzarch:%{m31:-mesa}%{m64:-mzarch}}}", \
|
||||
"%{!march=*:%{mesa:-march=g5}%{mzarch:-march=z900}}"
|
||||
"%{!march=*:%{mesa:-march=g5}%{mzarch:-march=z900}}", \
|
||||
MARCH_MTUNE_NATIVE_SPECS
|
||||
#endif
|
||||
|
||||
/* Constants needed to control the TEST DATA CLASS (TDC) instruction. */
|
||||
|
|
|
@ -79,6 +79,9 @@ Enum(processor_type) String(zEC12) Value(PROCESSOR_2827_ZEC12)
|
|||
EnumValue
|
||||
Enum(processor_type) String(z13) Value(PROCESSOR_2964_Z13)
|
||||
|
||||
EnumValue
|
||||
Enum(processor_type) String(native) Value(PROCESSOR_NATIVE) DriverOnly
|
||||
|
||||
mbackchain
|
||||
Target Report Mask(BACKCHAIN)
|
||||
Maintain backchain pointer
|
||||
|
|
3
gcc/config/s390/x-native
Normal file
3
gcc/config/s390/x-native
Normal file
|
@ -0,0 +1,3 @@
|
|||
driver-native.o : $(srcdir)/config/s390/driver-native.c \
|
||||
$(CONFIG_H) $(SYSTEM_H)
|
||||
$(COMPILER) -c $(ALL_COMPILERFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $<
|
Loading…
Add table
Reference in a new issue