131
|
1 # Copyright (C) 2016-2018 Free Software Foundation, Inc.
|
111
|
2 #
|
|
3 # This file is part of GCC.
|
|
4 #
|
|
5 # GCC is free software; you can redistribute it and/or modify it under
|
|
6 # the terms of the GNU General Public License as published by the Free
|
|
7 # Software Foundation; either version 3, or (at your option) any later
|
|
8 # version.
|
|
9 #
|
|
10 # GCC is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
11 # WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
12 # FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
13 # for more details.
|
|
14 #
|
|
15 # You should have received a copy of the GNU General Public License
|
|
16 # along with GCC; see the file COPYING3. If not see
|
|
17 # <http://www.gnu.org/licenses/>.
|
|
18
|
|
19 ##################################################################
|
|
20 #
|
|
21 # This file is using AVR's genmultilib.awk idea.
|
|
22 # Transform CPU Information from arc-cpu.def to a
|
|
23 # Representation that is understood by GCC's multilib Machinery.
|
|
24 #
|
|
25 # The Script works as a Filter from STDIN to STDOUT.
|
|
26 #
|
|
27 # FORMAT = "Makefile": Generate Makefile Snipet that sets some
|
|
28 # MULTILIB_* Variables as needed.
|
|
29 #
|
|
30 ##################################################################
|
|
31
|
|
32 BEGIN {
|
|
33 FS ="[(, \t)]+"
|
|
34 comment = 1
|
|
35 n_cores = 0
|
|
36 n_reuse = 0
|
|
37 }
|
|
38
|
|
39 ##################################################################
|
|
40 # Add some Comments to the generated Files and copy-paste
|
|
41 # Copyright Notice from above.
|
|
42 ##################################################################
|
|
43 /^#/ {
|
|
44 if (!comment)
|
|
45 next
|
|
46 else if (comment == 1)
|
|
47 {
|
|
48 if (FORMAT == "Makefile")
|
|
49 {
|
|
50 print "# Auto-generated Makefile Snip"
|
|
51 print "# Generated by : ./gcc/config/arc/genmultilib.awk"
|
|
52 print "# Generated from : ./gcc/config/arc/arc-cpu.def"
|
|
53 print "# Used by : tmake_file from Makefile and genmultilib"
|
|
54 print ""
|
|
55 }
|
|
56 }
|
|
57
|
|
58 comment = 2;
|
|
59
|
|
60 print
|
|
61 }
|
|
62
|
|
63 /^$/ {
|
|
64 # The first empty line stops copy-pasting the GPL comments
|
|
65 # from this file to the generated file.
|
|
66
|
|
67 comment = 0
|
|
68 }
|
|
69
|
|
70
|
|
71 /^ARC_CPU/ {
|
|
72 name = $2
|
|
73 # gsub ("\"", "", name)
|
|
74
|
|
75 if ($4 != "0")
|
|
76 {
|
|
77 arch = $3
|
|
78 if (arch == "6xx")
|
|
79 arch = 601
|
|
80
|
|
81 n = split ($4, cpu_flg, "|")
|
|
82
|
|
83 line = "mcpu." arch
|
|
84 for (i = 1; i <= n; i++)
|
|
85 {
|
|
86 if (cpu_flg[i] == "FL_MPYOPT_0")
|
|
87 line = line "/mmpy-option.0"
|
|
88 else if (cpu_flg[i] == "FL_MPYOPT_1")
|
|
89 line = line "/mmpy-option.1"
|
|
90 else if (cpu_flg[i] == "FL_MPYOPT_2")
|
|
91 line = line "/mmpy-option.2"
|
|
92 else if (cpu_flg[i] == "FL_MPYOPT_3")
|
|
93 line = line "/mmpy-option.3"
|
|
94 else if (cpu_flg[i] == "FL_MPYOPT_4")
|
|
95 line = line "/mmpy-option.4"
|
|
96 else if (cpu_flg[i] == "FL_MPYOPT_5")
|
|
97 line = line "/mmpy-option.5"
|
|
98 else if (cpu_flg[i] == "FL_MPYOPT_6")
|
|
99 line = line "/mmpy-option.6"
|
|
100 else if (cpu_flg[i] == "FL_MPYOPT_7")
|
|
101 line = line "/mmpy-option.7"
|
|
102 else if (cpu_flg[i] == "FL_MPYOPT_8")
|
|
103 line = line "/mmpy-option.8"
|
|
104 else if (cpu_flg[i] == "FL_MPYOPT_9")
|
|
105 line = line "/mmpy-option.9"
|
|
106 else if (cpu_flg[i] == "FL_CD")
|
|
107 line = line "/mcode-density"
|
|
108 else if (cpu_flg[i] == "FL_BS")
|
|
109 line = line "/mbarrel-shifter"
|
|
110 else if (cpu_flg[i] == "FL_DIVREM")
|
|
111 line = line "/mdiv-rem"
|
|
112 else if (cpu_flg[i] == "FL_NORM" \
|
|
113 || cpu_flg[i] == "FL_SWAP")
|
|
114 line = line "/mnorm"
|
|
115 else if (cpu_flg[i] == "FL_FPU_FPUS")
|
|
116 line = line "/mfpu.fpus"
|
|
117 else if (cpu_flg[i] == "FL_FPU_FPUDA")
|
|
118 line = line "/mfpu.fpuda"
|
|
119 else if (cpu_flg[i] == "FL_FPU_FPUD_ALL")
|
|
120 line = line "/mfpu.fpud_all"
|
|
121 else if (cpu_flg[i] == "FL_LL64")
|
|
122 line = line "/mll64"
|
|
123 else if (cpu_flg[i] == "FL_MUL64")
|
|
124 line = line "/mmul64"
|
|
125 else if (cpu_flg[i] == "FL_MUL32x16")
|
|
126 line = line "/mmul32x16"
|
|
127 else if (cpu_flg[i] == "FL_FPX_QUARK")
|
|
128 line = line "/quark"
|
|
129 else if (cpu_flg[i] == "FL_SPFP")
|
|
130 line = line "/spfp"
|
|
131 else if (cpu_flg[i] == "FL_DPFP")
|
|
132 line = line "/dpfp"
|
131
|
133 else if (cpu_flg[i] == "FL_RF16")
|
|
134 line = line "/mrf16"
|
111
|
135 else
|
|
136 {
|
|
137 print "Don't know the flag " cpu_flg[i] > "/dev/stderr"
|
|
138 exit 1
|
|
139 }
|
|
140 }
|
|
141 line = "mcpu." name "=" line
|
|
142 reuse[n_reuse] = line
|
|
143 n_reuse++
|
|
144 }
|
|
145
|
|
146 core = name
|
|
147 cores[n_cores] = core
|
|
148 n_cores++
|
|
149 }
|
|
150
|
|
151 ##################################################################
|
|
152 #
|
|
153 # We gathered all the Information, now build/output the following:
|
|
154 #
|
|
155 # awk Variable target Variable FORMAT
|
|
156 # -----------------------------------------------------------
|
|
157 # m_options <-> MULTILIB_OPTIONS Makefile
|
|
158 # m_dirnames <-> MULTILIB_DIRNAMES "
|
|
159 #
|
|
160 ##################################################################
|
|
161
|
|
162 END {
|
|
163 m_options = "\nMULTILIB_OPTIONS = "
|
|
164 m_dirnames = "\nMULTILIB_DIRNAMES ="
|
|
165 m_reuse = "\nMULTILIB_REUSE ="
|
|
166
|
|
167 sep = ""
|
|
168 for (c = 0; c < n_cores; c++)
|
|
169 {
|
|
170 m_options = m_options sep "mcpu=" cores[c]
|
|
171 m_dirnames = m_dirnames " " cores[c]
|
|
172 sep = "/"
|
|
173 }
|
|
174
|
|
175 sep = ""
|
|
176 for (c = 0; c < n_reuse; c++)
|
|
177 {
|
|
178 m_reuse = m_reuse sep reuse[c]
|
|
179 sep = "\nMULTILIB_REUSE +="
|
|
180 }
|
|
181 ############################################################
|
|
182 # Output that Stuff
|
|
183 ############################################################
|
|
184
|
|
185 if (FORMAT == "Makefile")
|
|
186 {
|
|
187 # Intended Target: ./gcc/config/arc/t-multilib
|
|
188
|
|
189 print m_options
|
|
190 print m_dirnames
|
|
191
|
|
192 ############################################################
|
|
193 # Legacy Aliases
|
|
194 ############################################################
|
|
195
|
|
196 print ""
|
|
197 print "# Aliases:"
|
|
198 print "MULTILIB_MATCHES = mcpu?arc600=mcpu?ARC600"
|
|
199 print "MULTILIB_MATCHES += mcpu?arc600=mARC600"
|
|
200 print "MULTILIB_MATCHES += mcpu?arc600=mA6"
|
|
201 print "MULTILIB_MATCHES += mcpu?arc601=mcpu?ARC601"
|
|
202 print "MULTILIB_MATCHES += mcpu?arc700=mA7"
|
|
203 print "MULTILIB_MATCHES += mcpu?arc700=mARC700"
|
|
204 }
|
|
205 }
|