Mercurial > hg > CbC > CbC_gcc
comparison gcc/config/mips/driver-native.c @ 0:a06113de4d67
first commit
author | kent <kent@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jul 2009 14:47:48 +0900 |
parents | |
children | 04ced10e8804 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:a06113de4d67 |
---|---|
1 /* Subroutines for the gcc driver. | |
2 Copyright (C) 2008 Free Software Foundation, Inc. | |
3 | |
4 This file is part of GCC. | |
5 | |
6 GCC is free software; you can redistribute it and/or modify | |
7 it under the terms of the GNU General Public License as published by | |
8 the Free Software Foundation; either version 3, or (at your option) | |
9 any later version. | |
10 | |
11 GCC is distributed in the hope that it will be useful, | |
12 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 GNU General Public License for more details. | |
15 | |
16 You should have received a copy of the GNU General Public License | |
17 along with GCC; see the file COPYING3. If not see | |
18 <http://www.gnu.org/licenses/>. */ | |
19 | |
20 #include "config.h" | |
21 #include "system.h" | |
22 #include "coretypes.h" | |
23 #include "tm.h" | |
24 | |
25 /* This will be called by the spec parser in gcc.c when it sees | |
26 a %:local_cpu_detect(args) construct. Currently it will be called | |
27 with either "arch" or "tune" as argument depending on if -march=native | |
28 or -mtune=native is to be substituted. | |
29 | |
30 It returns a string containing new command line parameters to be | |
31 put at the place of the above two options, depending on what CPU | |
32 this is executed. E.g. "-march=loongson2f" on a Loongson 2F for | |
33 -march=native. If the routine can't detect a known processor, | |
34 the -march or -mtune option is discarded. | |
35 | |
36 ARGC and ARGV are set depending on the actual arguments given | |
37 in the spec. */ | |
38 const char * | |
39 host_detect_local_cpu (int argc, const char **argv) | |
40 { | |
41 const char *cpu = NULL; | |
42 char buf[128]; | |
43 FILE *f; | |
44 bool arch; | |
45 | |
46 if (argc < 1) | |
47 return NULL; | |
48 | |
49 arch = strcmp (argv[0], "arch") == 0; | |
50 if (!arch && strcmp (argv[0], "tune")) | |
51 return NULL; | |
52 | |
53 f = fopen ("/proc/cpuinfo", "r"); | |
54 if (f == NULL) | |
55 return NULL; | |
56 | |
57 while (fgets (buf, sizeof (buf), f) != NULL) | |
58 if (strncmp (buf, "cpu model", sizeof ("cpu model") - 1) == 0) | |
59 { | |
60 if (strstr (buf, "Godson2 V0.2") != NULL | |
61 || strstr (buf, "Loongson-2 V0.2") != NULL) | |
62 cpu = "loongson2e"; | |
63 else if (strstr (buf, "Godson2 V0.3") != NULL | |
64 || strstr (buf, "Loongson-2 V0.3") != NULL) | |
65 cpu = "loongson2f"; | |
66 else if (strstr (buf, "SiByte SB1") != NULL) | |
67 cpu = "sb1"; | |
68 else if (strstr (buf, "R5000") != NULL) | |
69 cpu = "r5000"; | |
70 else if (strstr (buf, "Octeon") != NULL) | |
71 cpu = "octeon"; | |
72 break; | |
73 } | |
74 | |
75 fclose (f); | |
76 | |
77 if (cpu == NULL) | |
78 return NULL; | |
79 | |
80 return concat ("-m", argv[0], "=", cpu, NULL); | |
81 } |