Commit cc822cc1 by Rainer Orth Committed by Rainer Orth

driver-native.c [__sgi__]: Include <invent.h>, <sys/sbd.h>.

	* config/mips/driver-native.c [__sgi__]: Include <invent.h>,
	<sys/sbd.h>.
	(cpu_types): New array.
	(cputype): New function.
	(host_detect_local_cpu): Only define buf, f if !__sgi__.
	Use scaninvent instead of /proc/cpuinfo if __sgi__.
	* config.host: Also use driver-native.o, mips/x-native on
	mips-sgi-irix*.
	* config/mips/iris6.h [__mips__] (host_detect_local_cpu):
	Declare.
	(EXTRA_SPEC_FUNCTIONS, MARCH_MTUNE_NATIVE_SPECS): Define.
	(DRIVER_SELF_SPECS): Add MARCH_MTUNE_NATIVE_SPECS.

From-SVN: r176947
parent 25142650
2011-07-29 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* config/mips/driver-native.c [__sgi__]: Include <invent.h>,
<sys/sbd.h>.
(cpu_types): New array.
(cputype): New function.
(host_detect_local_cpu): Only define buf, f if !__sgi__.
Use scaninvent instead of /proc/cpuinfo if __sgi__.
* config.host: Also use driver-native.o, mips/x-native on
mips-sgi-irix*.
* config/mips/iris6.h [__mips__] (host_detect_local_cpu):
Declare.
(EXTRA_SPEC_FUNCTIONS, MARCH_MTUNE_NATIVE_SPECS): Define.
(DRIVER_SELF_SPECS): Add MARCH_MTUNE_NATIVE_SPECS.
2011-07-29 Jakub Jelinek <jakub@redhat.com> 2011-07-29 Jakub Jelinek <jakub@redhat.com>
PR middle-end/49897 PR middle-end/49897
......
...@@ -118,9 +118,9 @@ case ${host} in ...@@ -118,9 +118,9 @@ case ${host} in
;; ;;
esac esac
;; ;;
mips*-*-linux*) mips*-*-linux* | mips-sgi-irix*)
case ${target} in case ${target} in
mips*-*-linux*) mips*-*-linux* | mips-sgi-irix*)
host_extra_gcc_objs="driver-native.o" host_extra_gcc_objs="driver-native.o"
host_xmake_file="${host_xmake_file} mips/x-native" host_xmake_file="${host_xmake_file} mips/x-native"
;; ;;
......
/* Subroutines for the gcc driver. /* Subroutines for the gcc driver.
Copyright (C) 2008 Free Software Foundation, Inc. Copyright (C) 2008, 2011 Free Software Foundation, Inc.
This file is part of GCC. This file is part of GCC.
...@@ -22,6 +22,59 @@ along with GCC; see the file COPYING3. If not see ...@@ -22,6 +22,59 @@ along with GCC; see the file COPYING3. If not see
#include "coretypes.h" #include "coretypes.h"
#include "tm.h" #include "tm.h"
#ifdef __sgi__
#include <invent.h>
#include <sys/sbd.h>
/* Cf. MIPS R10000 Microprocessor User Guide, Version 2.0, 14.13 Processor
Revision Identifier (PRId) Register (15).
http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi/hdwr/bks/SGI_Developer/books/R10K_UM/sgi_html/t5.Ver.2.0.book_279.html */
static const struct cpu_types {
int impl;
const char *cpu;
} cpu_types[] = {
{ C0_IMP_R2000, "r2000" },
{ C0_IMP_R3000, "r3000" },
{ C0_IMP_R6000, "r6000" },
{ C0_IMP_R4000, "r4000" },
{ C0_IMP_R6000A, "r6000" },
{ C0_IMP_R10000, "r10000" },
{ C0_IMP_R12000, "r12000" },
{ C0_IMP_R14000, "r14000" },
{ C0_IMP_R8000, "r8000" },
{ C0_IMP_R4600, "r4600" },
{ C0_IMP_R4700, "r4600" },
{ C0_IMP_R4650, "r4650" },
{ C0_IMP_R5000, "vr5000" },
{ C0_IMP_RM7000, "rm7000" },
{ C0_IMP_RM5271, "vr5000" },
{ 0, 0 }
};
static int
cputype (inventory_t *inv, void *arg)
{
if (inv != NULL
&& inv->inv_class == INV_PROCESSOR
&& inv->inv_type == INV_CPUCHIP)
{
int i;
/* inv_state is the cpu revision number. */
int impl = (inv->inv_state & C0_IMPMASK) >> C0_IMPSHIFT;
for (i = 0; cpu_types[i].cpu != NULL; i++)
if (cpu_types[i].impl == impl)
{
*((const char **) arg) = cpu_types[i].cpu;
break;
}
}
return 0;
}
#endif
/* This will be called by the spec parser in gcc.c when it sees /* 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 a %:local_cpu_detect(args) construct. Currently it will be called
with either "arch" or "tune" as argument depending on if -march=native with either "arch" or "tune" as argument depending on if -march=native
...@@ -39,8 +92,10 @@ const char * ...@@ -39,8 +92,10 @@ const char *
host_detect_local_cpu (int argc, const char **argv) host_detect_local_cpu (int argc, const char **argv)
{ {
const char *cpu = NULL; const char *cpu = NULL;
#ifndef __sgi__
char buf[128]; char buf[128];
FILE *f; FILE *f;
#endif
bool arch; bool arch;
if (argc < 1) if (argc < 1)
...@@ -50,6 +105,9 @@ host_detect_local_cpu (int argc, const char **argv) ...@@ -50,6 +105,9 @@ host_detect_local_cpu (int argc, const char **argv)
if (!arch && strcmp (argv[0], "tune")) if (!arch && strcmp (argv[0], "tune"))
return NULL; return NULL;
#ifdef __sgi__
scaninvent (cputype, &cpu);
#else
f = fopen ("/proc/cpuinfo", "r"); f = fopen ("/proc/cpuinfo", "r");
if (f == NULL) if (f == NULL)
return NULL; return NULL;
...@@ -73,6 +131,7 @@ host_detect_local_cpu (int argc, const char **argv) ...@@ -73,6 +131,7 @@ host_detect_local_cpu (int argc, const char **argv)
} }
fclose (f); fclose (f);
#endif
if (cpu == NULL) if (cpu == NULL)
return NULL; return NULL;
......
...@@ -27,13 +27,28 @@ along with GCC; see the file COPYING3. If not see ...@@ -27,13 +27,28 @@ along with GCC; see the file COPYING3. If not see
#undef MULTILIB_DEFAULTS #undef MULTILIB_DEFAULTS
#define MULTILIB_DEFAULTS { "mabi=n32" } #define MULTILIB_DEFAULTS { "mabi=n32" }
/* -march=native handling only makes sense with compiler running on
a MIPS chip. */
#if defined(__mips__)
extern const char *host_detect_local_cpu (int argc, const char **argv);
# define EXTRA_SPEC_FUNCTIONS \
{ "local_cpu_detect", 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)}"
#else
# define MARCH_MTUNE_NATIVE_SPECS ""
#endif
/* Force the default ABI onto the command line in order to make the specs /* Force the default ABI onto the command line in order to make the specs
easier to write. */ easier to write. */
#undef DRIVER_SELF_SPECS #undef DRIVER_SELF_SPECS
#define DRIVER_SELF_SPECS \ #define DRIVER_SELF_SPECS \
"%{!mabi=*: -mabi=n32}", \ "%{!mabi=*: -mabi=n32}", \
/* Configuration-independent MIPS rules. */ \ /* Configuration-independent MIPS rules. */ \
BASE_DRIVER_SELF_SPECS BASE_DRIVER_SELF_SPECS, \
MARCH_MTUNE_NATIVE_SPECS
/* IRIX 6.5 has the float and long double forms of math functions. */ /* IRIX 6.5 has the float and long double forms of math functions. */
#define TARGET_C99_FUNCTIONS 1 #define TARGET_C99_FUNCTIONS 1
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment