yann@1
|
1 |
Note... modified my mjn3 to not conflict with the big endian arm patch.
|
yann@1
|
2 |
Warning!!! Only the linux target is aware of TARGET_ENDIAN_DEFAULT.
|
yann@1
|
3 |
Also changed
|
yann@1
|
4 |
#define SUBTARGET_EXTRA_ASM_SPEC "\
|
yann@1
|
5 |
%{!mcpu=*:-mcpu=xscale} \
|
yann@1
|
6 |
%{mhard-float:-mfpu=fpa} \
|
yann@1
|
7 |
%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
|
yann@1
|
8 |
to
|
yann@1
|
9 |
#define SUBTARGET_EXTRA_ASM_SPEC "\
|
yann@1
|
10 |
%{mhard-float:-mfpu=fpa} \
|
yann@1
|
11 |
%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
|
yann@1
|
12 |
in gcc/config/arm/linux-elf.h.
|
yann@1
|
13 |
#
|
yann@1
|
14 |
# Submitted:
|
yann@1
|
15 |
#
|
yann@1
|
16 |
# Dimitry Andric <dimitry@andric.com>, 2004-05-01
|
yann@1
|
17 |
#
|
yann@1
|
18 |
# Description:
|
yann@1
|
19 |
#
|
yann@1
|
20 |
# Nicholas Pitre released this patch for gcc soft-float support here:
|
yann@1
|
21 |
# http://lists.arm.linux.org.uk/pipermail/linux-arm/2003-October/006436.html
|
yann@1
|
22 |
#
|
yann@1
|
23 |
# This version has been adapted to work with gcc 3.4.0.
|
yann@1
|
24 |
#
|
yann@1
|
25 |
# The original patch doesn't distinguish between softfpa and softvfp modes
|
yann@1
|
26 |
# in the way Nicholas Pitre probably meant. His description is:
|
yann@1
|
27 |
#
|
yann@1
|
28 |
# "Default is to use APCS-32 mode with soft-vfp. The old Linux default for
|
yann@1
|
29 |
# floats can be achieved with -mhard-float or with the configure
|
yann@1
|
30 |
# --with-float=hard option. If -msoft-float or --with-float=soft is used then
|
yann@1
|
31 |
# software float support will be used just like the default but with the legacy
|
yann@1
|
32 |
# big endian word ordering for double float representation instead."
|
yann@1
|
33 |
#
|
yann@1
|
34 |
# Which means the following:
|
yann@1
|
35 |
#
|
yann@1
|
36 |
# * If you compile without -mhard-float or -msoft-float, you should get
|
yann@1
|
37 |
# software floating point, using the VFP format. The produced object file
|
yann@1
|
38 |
# should have these flags in its header:
|
yann@1
|
39 |
#
|
yann@1
|
40 |
# private flags = 600: [APCS-32] [VFP float format] [software FP]
|
yann@1
|
41 |
#
|
yann@1
|
42 |
# * If you compile with -mhard-float, you should get hardware floating point,
|
yann@1
|
43 |
# which always uses the FPA format. Object file header flags should be:
|
yann@1
|
44 |
#
|
yann@1
|
45 |
# private flags = 0: [APCS-32] [FPA float format]
|
yann@1
|
46 |
#
|
yann@1
|
47 |
# * If you compile with -msoft-float, you should get software floating point,
|
yann@1
|
48 |
# using the FPA format. This is done for compatibility reasons with many
|
yann@1
|
49 |
# existing distributions. Object file header flags should be:
|
yann@1
|
50 |
#
|
yann@1
|
51 |
# private flags = 200: [APCS-32] [FPA float format] [software FP]
|
yann@1
|
52 |
#
|
yann@1
|
53 |
# The original patch from Nicholas Pitre contained the following constructs:
|
yann@1
|
54 |
#
|
yann@1
|
55 |
# #define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
|
yann@1
|
56 |
# %{mhard-float:-mfpu=fpa} \
|
yann@1
|
57 |
# %{!mhard-float: %{msoft-float:-mfpu=softfpa;:-mfpu=softvfp}}"
|
yann@1
|
58 |
#
|
yann@1
|
59 |
# However, gcc doesn't accept this ";:" notation, used in the 3rd line. This
|
yann@1
|
60 |
# is probably the reason Robert Schwebel modified it to:
|
yann@1
|
61 |
#
|
yann@1
|
62 |
# #define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
|
yann@1
|
63 |
# %{mhard-float:-mfpu=fpa} \
|
yann@1
|
64 |
# %{!mhard-float: %{msoft-float:-mfpu=softfpa -mfpu=softvfp}}"
|
yann@1
|
65 |
#
|
yann@1
|
66 |
# But this causes the following behaviour:
|
yann@1
|
67 |
#
|
yann@1
|
68 |
# * If you compile without -mhard-float or -msoft-float, the compiler generates
|
yann@1
|
69 |
# software floating point instructions, but *nothing* is passed to the
|
yann@1
|
70 |
# assembler, which results in an object file which has flags:
|
yann@1
|
71 |
#
|
yann@1
|
72 |
# private flags = 0: [APCS-32] [FPA float format]
|
yann@1
|
73 |
#
|
yann@1
|
74 |
# This is not correct!
|
yann@1
|
75 |
#
|
yann@1
|
76 |
# * If you compile with -mhard-float, the compiler generates hardware floating
|
yann@1
|
77 |
# point instructions, and passes "-mfpu=fpa" to the assembler, which results
|
yann@1
|
78 |
# in an object file which has the same flags as in the previous item, but now
|
yann@1
|
79 |
# those *are* correct.
|
yann@1
|
80 |
#
|
yann@1
|
81 |
# * If you compile with -msoft-float, the compiler generates software floating
|
yann@1
|
82 |
# point instructions, and passes "-mfpu=softfpa -mfpu=softvfp" (in that
|
yann@1
|
83 |
# order) to the assembler, which results in an object file with flags:
|
yann@1
|
84 |
#
|
yann@1
|
85 |
# private flags = 600: [APCS-32] [VFP float format] [software FP]
|
yann@1
|
86 |
#
|
yann@1
|
87 |
# This is not correct, because the last "-mfpu=" option on the assembler
|
yann@1
|
88 |
# command line determines the actual FPU convention used (which should be FPA
|
yann@1
|
89 |
# in this case).
|
yann@1
|
90 |
#
|
yann@1
|
91 |
# Therefore, I modified this patch to get the desired behaviour. Every
|
yann@1
|
92 |
# instance of the notation:
|
yann@1
|
93 |
#
|
yann@1
|
94 |
# %{msoft-float:-mfpu=softfpa -mfpu=softvfp}
|
yann@1
|
95 |
#
|
yann@1
|
96 |
# was changed to:
|
yann@1
|
97 |
#
|
yann@1
|
98 |
# %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}
|
yann@1
|
99 |
#
|
yann@1
|
100 |
# I also did the following:
|
yann@1
|
101 |
#
|
yann@1
|
102 |
# * Modified all TARGET_DEFAULT macros I could find to include ARM_FLAG_VFP, to
|
yann@1
|
103 |
# be consistent with Nicholas' original patch.
|
yann@1
|
104 |
# * Removed any "msoft-float" or "mhard-float" from all MULTILIB_DEFAULTS
|
yann@1
|
105 |
# macros I could find. I think that if you compile without any options, you
|
yann@1
|
106 |
# would like to get the defaults. :)
|
yann@1
|
107 |
# * Removed the extra -lfloat option from LIBGCC_SPEC, since it isn't needed
|
yann@1
|
108 |
# anymore. (The required functions are now in libgcc.)
|
yann@1
|
109 |
|
yann@1
|
110 |
diff -urN gcc-3.4.1-old/gcc/config/arm/coff.h gcc-3.4.1/gcc/config/arm/coff.h
|
yann@1
|
111 |
--- gcc-3.4.1-old/gcc/config/arm/coff.h 2004-02-24 08:25:22.000000000 -0600
|
yann@1
|
112 |
+++ gcc-3.4.1/gcc/config/arm/coff.h 2004-09-02 21:51:15.000000000 -0500
|
yann@1
|
113 |
@@ -31,11 +31,16 @@
|
yann@1
|
114 |
#define TARGET_VERSION fputs (" (ARM/coff)", stderr)
|
yann@1
|
115 |
|
yann@1
|
116 |
#undef TARGET_DEFAULT
|
yann@1
|
117 |
-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
|
yann@1
|
118 |
+#define TARGET_DEFAULT \
|
yann@1
|
119 |
+ ( ARM_FLAG_SOFT_FLOAT \
|
yann@1
|
120 |
+ | ARM_FLAG_VFP \
|
yann@1
|
121 |
+ | ARM_FLAG_APCS_32 \
|
yann@1
|
122 |
+ | ARM_FLAG_APCS_FRAME \
|
yann@1
|
123 |
+ | ARM_FLAG_MMU_TRAPS )
|
yann@1
|
124 |
|
yann@1
|
125 |
#ifndef MULTILIB_DEFAULTS
|
yann@1
|
126 |
#define MULTILIB_DEFAULTS \
|
yann@1
|
127 |
- { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork" }
|
yann@1
|
128 |
+ { "marm", "mlittle-endian", "mapcs-32", "mno-thumb-interwork" }
|
yann@1
|
129 |
#endif
|
yann@1
|
130 |
|
yann@1
|
131 |
/* This is COFF, but prefer stabs. */
|
yann@1
|
132 |
diff -urN gcc-3.4.1-old/gcc/config/arm/elf.h gcc-3.4.1/gcc/config/arm/elf.h
|
yann@1
|
133 |
--- gcc-3.4.1-old/gcc/config/arm/elf.h 2004-02-24 08:25:22.000000000 -0600
|
yann@1
|
134 |
+++ gcc-3.4.1/gcc/config/arm/elf.h 2004-09-02 21:51:15.000000000 -0500
|
yann@1
|
135 |
@@ -46,7 +46,9 @@
|
yann@1
|
136 |
|
yann@1
|
137 |
#ifndef SUBTARGET_ASM_FLOAT_SPEC
|
yann@1
|
138 |
#define SUBTARGET_ASM_FLOAT_SPEC "\
|
yann@1
|
139 |
-%{mapcs-float:-mfloat} %{msoft-float:-mfpu=softfpa}"
|
yann@1
|
140 |
+%{mapcs-float:-mfloat} \
|
yann@1
|
141 |
+%{mhard-float:-mfpu=fpa} \
|
yann@1
|
142 |
+%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
|
yann@1
|
143 |
#endif
|
yann@1
|
144 |
|
yann@1
|
145 |
#ifndef ASM_SPEC
|
yann@1
|
146 |
@@ -106,12 +108,17 @@
|
yann@1
|
147 |
#endif
|
yann@1
|
148 |
|
yann@1
|
149 |
#ifndef TARGET_DEFAULT
|
yann@1
|
150 |
-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
|
yann@1
|
151 |
+#define TARGET_DEFAULT \
|
yann@1
|
152 |
+ ( ARM_FLAG_SOFT_FLOAT \
|
yann@1
|
153 |
+ | ARM_FLAG_VFP \
|
yann@1
|
154 |
+ | ARM_FLAG_APCS_32 \
|
yann@1
|
155 |
+ | ARM_FLAG_APCS_FRAME \
|
yann@1
|
156 |
+ | ARM_FLAG_MMU_TRAPS )
|
yann@1
|
157 |
#endif
|
yann@1
|
158 |
|
yann@1
|
159 |
#ifndef MULTILIB_DEFAULTS
|
yann@1
|
160 |
#define MULTILIB_DEFAULTS \
|
yann@1
|
161 |
- { "marm", "mlittle-endian", "msoft-float", "mapcs-32", "mno-thumb-interwork", "fno-leading-underscore" }
|
yann@1
|
162 |
+ { "marm", "mlittle-endian", "mapcs-32", "mno-thumb-interwork", "fno-leading-underscore" }
|
yann@1
|
163 |
#endif
|
yann@1
|
164 |
|
yann@1
|
165 |
#define TARGET_ASM_FILE_START_APP_OFF true
|
yann@1
|
166 |
diff -urN gcc-3.4.1-old/gcc/config/arm/linux-elf.h gcc-3.4.1/gcc/config/arm/linux-elf.h
|
yann@1
|
167 |
--- gcc-3.4.1-old/gcc/config/arm/linux-elf.h 2004-09-02 21:50:52.000000000 -0500
|
yann@1
|
168 |
+++ gcc-3.4.1/gcc/config/arm/linux-elf.h 2004-09-02 22:00:49.000000000 -0500
|
yann@1
|
169 |
@@ -44,12 +44,26 @@
|
yann@1
|
170 |
#define TARGET_LINKER_EMULATION "armelf_linux"
|
yann@1
|
171 |
#endif
|
yann@1
|
172 |
|
yann@1
|
173 |
-/* Default is to use APCS-32 mode. */
|
yann@1
|
174 |
+/*
|
yann@1
|
175 |
+ * Default is to use APCS-32 mode with soft-vfp.
|
yann@1
|
176 |
+ * The old Linux default for floats can be achieved with -mhard-float
|
yann@1
|
177 |
+ * or with the configure --with-float=hard option.
|
yann@1
|
178 |
+ * If -msoft-float or --with-float=soft is used then software float
|
yann@1
|
179 |
+ * support will be used just like the default but with the legacy
|
yann@1
|
180 |
+ * big endian word ordering for double float representation instead.
|
yann@1
|
181 |
+ */
|
yann@1
|
182 |
#undef TARGET_DEFAULT
|
yann@1
|
183 |
-#define TARGET_DEFAULT \
|
yann@1
|
184 |
- ( ARM_FLAG_APCS_32 | \
|
yann@1
|
185 |
- ARM_FLAG_MMU_TRAPS | \
|
yann@1
|
186 |
- TARGET_ENDIAN_DEFAULT )
|
yann@1
|
187 |
+#define TARGET_DEFAULT \
|
yann@1
|
188 |
+ ( ARM_FLAG_APCS_32 \
|
yann@1
|
189 |
+ | ARM_FLAG_SOFT_FLOAT \
|
yann@1
|
190 |
+ | TARGET_ENDIAN_DEFAULT \
|
yann@1
|
191 |
+ | ARM_FLAG_VFP \
|
yann@1
|
192 |
+ | ARM_FLAG_MMU_TRAPS )
|
yann@1
|
193 |
+
|
yann@1
|
194 |
+#undef SUBTARGET_EXTRA_ASM_SPEC
|
yann@1
|
195 |
+#define SUBTARGET_EXTRA_ASM_SPEC "\
|
yann@1
|
196 |
+%{mhard-float:-mfpu=fpa} \
|
yann@1
|
197 |
+%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
|
yann@1
|
198 |
|
yann@1
|
199 |
#define SUBTARGET_CPU_DEFAULT TARGET_CPU_arm6
|
yann@1
|
200 |
|
yann@1
|
201 |
@@ -57,7 +71,7 @@
|
yann@1
|
202 |
|
yann@1
|
203 |
#undef MULTILIB_DEFAULTS
|
yann@1
|
204 |
#define MULTILIB_DEFAULTS \
|
yann@1
|
205 |
- { "marm", TARGET_ENDIAN_OPTION, "mhard-float", "mapcs-32", "mno-thumb-interwork" }
|
yann@1
|
206 |
+ { "marm", TARGET_ENDIAN_OPTION, "mapcs-32", "mno-thumb-interwork" }
|
yann@1
|
207 |
|
yann@1
|
208 |
#define CPP_APCS_PC_DEFAULT_SPEC "-D__APCS_32__"
|
yann@1
|
209 |
|
yann@1
|
210 |
@@ -72,7 +86,7 @@
|
yann@1
|
211 |
%{shared:-lc} \
|
yann@1
|
212 |
%{!shared:%{profile:-lc_p}%{!profile:-lc}}"
|
yann@1
|
213 |
|
yann@1
|
214 |
-#define LIBGCC_SPEC "%{msoft-float:-lfloat} -lgcc"
|
yann@1
|
215 |
+#define LIBGCC_SPEC "-lgcc"
|
yann@1
|
216 |
|
yann@1
|
217 |
/* Provide a STARTFILE_SPEC appropriate for GNU/Linux. Here we add
|
yann@1
|
218 |
the GNU/Linux magical crtbegin.o file (see crtstuff.c) which
|
yann@1
|
219 |
diff -urN gcc-3.4.1-old/gcc/config/arm/t-linux gcc-3.4.1/gcc/config/arm/t-linux
|
yann@1
|
220 |
--- gcc-3.4.1-old/gcc/config/arm/t-linux 2003-09-20 16:09:07.000000000 -0500
|
yann@1
|
221 |
+++ gcc-3.4.1/gcc/config/arm/t-linux 2004-09-02 21:51:15.000000000 -0500
|
yann@1
|
222 |
@@ -4,7 +4,10 @@
|
yann@1
|
223 |
LIBGCC2_DEBUG_CFLAGS = -g0
|
yann@1
|
224 |
|
yann@1
|
225 |
LIB1ASMSRC = arm/lib1funcs.asm
|
yann@1
|
226 |
-LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx
|
yann@1
|
227 |
+LIB1ASMFUNCS = _udivsi3 _divsi3 _umodsi3 _modsi3 _dvmd_lnx \
|
yann@1
|
228 |
+ _negdf2 _addsubdf3 _muldivdf3 _cmpdf2 _unorddf2 _fixdfsi _fixunsdfsi \
|
yann@1
|
229 |
+ _truncdfsf2 _negsf2 _addsubsf3 _muldivsf3 _cmpsf2 _unordsf2 \
|
yann@1
|
230 |
+ _fixsfsi _fixunssfsi
|
yann@1
|
231 |
|
yann@1
|
232 |
# MULTILIB_OPTIONS = mhard-float/msoft-float
|
yann@1
|
233 |
# MULTILIB_DIRNAMES = hard-float soft-float
|
yann@1
|
234 |
diff -urN gcc-3.4.1-old/gcc/config/arm/unknown-elf.h gcc-3.4.1/gcc/config/arm/unknown-elf.h
|
yann@1
|
235 |
--- gcc-3.4.1-old/gcc/config/arm/unknown-elf.h 2004-02-24 08:25:22.000000000 -0600
|
yann@1
|
236 |
+++ gcc-3.4.1/gcc/config/arm/unknown-elf.h 2004-09-02 21:51:15.000000000 -0500
|
yann@1
|
237 |
@@ -30,7 +30,12 @@
|
yann@1
|
238 |
|
yann@1
|
239 |
/* Default to using APCS-32 and software floating point. */
|
yann@1
|
240 |
#ifndef TARGET_DEFAULT
|
yann@1
|
241 |
-#define TARGET_DEFAULT (ARM_FLAG_SOFT_FLOAT | ARM_FLAG_APCS_32 | ARM_FLAG_APCS_FRAME | ARM_FLAG_MMU_TRAPS)
|
yann@1
|
242 |
+#define TARGET_DEFAULT \
|
yann@1
|
243 |
+ ( ARM_FLAG_SOFT_FLOAT \
|
yann@1
|
244 |
+ | ARM_FLAG_VFP \
|
yann@1
|
245 |
+ | ARM_FLAG_APCS_32 \
|
yann@1
|
246 |
+ | ARM_FLAG_APCS_FRAME \
|
yann@1
|
247 |
+ | ARM_FLAG_MMU_TRAPS )
|
yann@1
|
248 |
#endif
|
yann@1
|
249 |
|
yann@1
|
250 |
/* Now we define the strings used to build the spec file. */
|
yann@1
|
251 |
diff -urN gcc-3.4.1-old/gcc/config/arm/xscale-elf.h gcc-3.4.1/gcc/config/arm/xscale-elf.h
|
yann@1
|
252 |
--- gcc-3.4.1-old/gcc/config/arm/xscale-elf.h 2003-07-01 18:26:43.000000000 -0500
|
yann@1
|
253 |
+++ gcc-3.4.1/gcc/config/arm/xscale-elf.h 2004-09-02 21:51:15.000000000 -0500
|
yann@1
|
254 |
@@ -49,11 +49,12 @@
|
yann@1
|
255 |
endian, regardless of the endian-ness of the memory
|
yann@1
|
256 |
system. */
|
yann@1
|
257 |
|
yann@1
|
258 |
-#define SUBTARGET_EXTRA_ASM_SPEC "%{!mcpu=*:-mcpu=xscale} \
|
yann@1
|
259 |
- %{mhard-float:-mfpu=fpa} \
|
yann@1
|
260 |
- %{!mhard-float: %{msoft-float:-mfpu=softfpa;:-mfpu=softvfp}}"
|
yann@1
|
261 |
+#define SUBTARGET_EXTRA_ASM_SPEC "\
|
yann@1
|
262 |
+%{!mcpu=*:-mcpu=xscale} \
|
yann@1
|
263 |
+%{mhard-float:-mfpu=fpa} \
|
yann@1
|
264 |
+%{!mhard-float: %{msoft-float:-mfpu=softfpa} %{!msoft-float:-mfpu=softvfp}}"
|
yann@1
|
265 |
|
yann@1
|
266 |
#ifndef MULTILIB_DEFAULTS
|
yann@1
|
267 |
#define MULTILIB_DEFAULTS \
|
yann@1
|
268 |
- { "mlittle-endian", "mno-thumb-interwork", "marm", "msoft-float" }
|
yann@1
|
269 |
+ { "mlittle-endian", "mno-thumb-interwork", "marm" }
|
yann@1
|
270 |
#endif
|