Commit | Line | Data |
---|---|---|
8cacc98c PHK |
1 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/config/i386/freebsd.h gcc-2.5.8/config/i386/freebsd.h |
2 | *** gcc-2.5.8.gnu/config/i386/freebsd.h Thu Jan 1 01:00:00 1970 | |
3 | --- gcc-2.5.8/config/i386/freebsd.h Sun Feb 27 00:40:55 1994 | |
4 | *************** | |
5 | *** 0 **** | |
6 | --- 1,341 ---- | |
7 | + /* Configuration for an i386 running FreeBSD as the target machine. | |
8 | + * | |
9 | + * 7th feb 1994, Poul-Henning Kamp <phk@login.dkuug.dk> | |
10 | + * Made to fit FreeBSD 1.1 and GCC 2.5.8 | |
11 | + */ | |
12 | + | |
13 | + /* This goes away when the math-emulator is fixed */ | |
14 | + #define TARGET_CPU_DEFAULT 0400 /* TARGET_NO_FANCY_MATH_387 */ | |
15 | + | |
16 | + /* Just in case. (Cross-compilations &c) */ | |
17 | + #ifndef __FreeBSD__ | |
18 | + #define __FreeBSD__ 1 | |
19 | + #endif | |
20 | + | |
21 | + /* This is tested by i386gas.h. */ | |
22 | + #define YES_UNDERSCORES | |
23 | + | |
24 | + #include "i386/gstabs.h" | |
25 | + | |
26 | + /* Get perform_* macros to build libgcc.a. */ | |
27 | + #include "i386/perform.h" | |
28 | + | |
29 | + #undef CPP_PREDEFINES | |
30 | + #define CPP_PREDEFINES "-Dunix -Di386 -D__FreeBSD__ -D__386BSD__ -Asystem(unix) -Asystem(FreeBSD) -Acpu(i386) -Amachine(i386)" | |
31 | + | |
32 | + #define INCLUDE_DEFAULTS { \ | |
33 | + { "/usr/include", 0 }, \ | |
34 | + { "/usr/include/g++", 1 }, \ | |
35 | + { 0, 0} \ | |
36 | + } | |
37 | + | |
38 | + /* Like the default, except no -lg. */ | |
39 | + #define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}" | |
40 | + | |
41 | + #undef SIZE_TYPE | |
42 | + #define SIZE_TYPE "unsigned int" | |
43 | + | |
44 | + #undef PTRDIFF_TYPE | |
45 | + #define PTRDIFF_TYPE "int" | |
46 | + | |
47 | + #undef WCHAR_TYPE | |
48 | + #define WCHAR_TYPE "short unsigned int" | |
49 | + | |
50 | + #define WCHAR_UNSIGNED 1 | |
51 | + | |
52 | + #undef WCHAR_TYPE_SIZE | |
53 | + #define WCHAR_TYPE_SIZE 16 | |
54 | + | |
55 | + #define HAVE_ATEXIT | |
56 | + | |
57 | + /* Redefine this to use %eax instead of %edx. */ | |
58 | + #undef FUNCTION_PROFILER | |
59 | + #define FUNCTION_PROFILER(FILE, LABELNO) \ | |
60 | + { \ | |
61 | + if (flag_pic) \ | |
62 | + { \ | |
63 | + fprintf (FILE, "\tleal %sP%d@GOTOFF(%%ebx),%%eax\n", \ | |
64 | + LPREFIX, (LABELNO)); \ | |
65 | + fprintf (FILE, "\tcall *mcount@GOT(%%ebx)\n"); \ | |
66 | + } \ | |
67 | + else \ | |
68 | + { \ | |
69 | + fprintf (FILE, "\tmovl $%sP%d,%%eax\n", LPREFIX, (LABELNO)); \ | |
70 | + fprintf (FILE, "\tcall mcount\n"); \ | |
71 | + } \ | |
72 | + } | |
73 | + | |
74 | + /* There are conflicting reports about whether this system uses | |
75 | + a different assembler syntax. wilson@cygnus.com says # is right. */ | |
76 | + #undef COMMENT_BEGIN | |
77 | + #define COMMENT_BEGIN "#" | |
78 | + | |
79 | + #undef ASM_APP_ON | |
80 | + #define ASM_APP_ON "#APP\n" | |
81 | + | |
82 | + #undef ASM_APP_OFF | |
83 | + #define ASM_APP_OFF "#NO_APP\n" | |
84 | + \f | |
85 | + /* The following macros are stolen from i386v4.h */ | |
86 | + /* These have to be defined to get PIC code correct */ | |
87 | + | |
88 | + /* This is how to output an element of a case-vector that is relative. | |
89 | + This is only used for PIC code. See comments by the `casesi' insn in | |
90 | + i386.md for an explanation of the expression this outputs. */ | |
91 | + | |
92 | + #undef ASM_OUTPUT_ADDR_DIFF_ELT | |
93 | + #define ASM_OUTPUT_ADDR_DIFF_ELT(FILE, VALUE, REL) \ | |
94 | + fprintf (FILE, "\t.long _GLOBAL_OFFSET_TABLE_+[.-%s%d]\n", LPREFIX, VALUE) | |
95 | + | |
96 | + /* Indicate that jump tables go in the text section. This is | |
97 | + necessary when compiling PIC code. */ | |
98 | + | |
99 | + #define JUMP_TABLES_IN_TEXT_SECTION | |
100 | + | |
101 | + /* Don't default to pcc-struct-return, because gcc is the only compiler, and | |
102 | + we want to retain compatibility with older gcc versions. */ | |
103 | + #define DEFAULT_PCC_STRUCT_RETURN 0 | |
104 | + | |
105 | + /* | |
106 | + * Some imports from svr4.h in support of shared libraries. | |
107 | + * Currently, we need the DECLARE_OBJECT_SIZE stuff. | |
108 | + */ | |
109 | + | |
110 | + /* Define the strings used for the special svr4 .type and .size directives. | |
111 | + These strings generally do not vary from one system running svr4 to | |
112 | + another, but if a given system (e.g. m88k running svr) needs to use | |
113 | + different pseudo-op names for these, they may be overridden in the | |
114 | + file which includes this one. */ | |
115 | + | |
116 | + #define TYPE_ASM_OP ".type" | |
117 | + #define SIZE_ASM_OP ".size" | |
118 | + #define WEAK_ASM_OP ".weak" | |
119 | + | |
120 | + /* The following macro defines the format used to output the second | |
121 | + operand of the .type assembler directive. Different svr4 assemblers | |
122 | + expect various different forms for this operand. The one given here | |
123 | + is just a default. You may need to override it in your machine- | |
124 | + specific tm.h file (depending upon the particulars of your assembler). */ | |
125 | + | |
126 | + #define TYPE_OPERAND_FMT "@%s" | |
127 | + | |
128 | + /* Write the extra assembler code needed to declare a function's result. | |
129 | + Most svr4 assemblers don't require any special declaration of the | |
130 | + result value, but there are exceptions. */ | |
131 | + | |
132 | + #ifndef ASM_DECLARE_RESULT | |
133 | + #define ASM_DECLARE_RESULT(FILE, RESULT) | |
134 | + #endif | |
135 | + | |
136 | + /* These macros generate the special .type and .size directives which | |
137 | + are used to set the corresponding fields of the linker symbol table | |
138 | + entries in an ELF object file under SVR4. These macros also output | |
139 | + the starting labels for the relevant functions/objects. */ | |
140 | + | |
141 | + /* Write the extra assembler code needed to declare a function properly. | |
142 | + Some svr4 assemblers need to also have something extra said about the | |
143 | + function's return value. We allow for that here. */ | |
144 | + | |
145 | + #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ | |
146 | + do { \ | |
147 | + fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \ | |
148 | + assemble_name (FILE, NAME); \ | |
149 | + putc (',', FILE); \ | |
150 | + fprintf (FILE, TYPE_OPERAND_FMT, "function"); \ | |
151 | + putc ('\n', FILE); \ | |
152 | + ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \ | |
153 | + ASM_OUTPUT_LABEL(FILE, NAME); \ | |
154 | + } while (0) | |
155 | + | |
156 | + /* Write the extra assembler code needed to declare an object properly. */ | |
157 | + | |
158 | + #define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \ | |
159 | + do { \ | |
160 | + fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \ | |
161 | + assemble_name (FILE, NAME); \ | |
162 | + putc (',', FILE); \ | |
163 | + fprintf (FILE, TYPE_OPERAND_FMT, "object"); \ | |
164 | + putc ('\n', FILE); \ | |
165 | + size_directive_output = 0; \ | |
166 | + if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \ | |
167 | + { \ | |
168 | + size_directive_output = 1; \ | |
169 | + fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \ | |
170 | + assemble_name (FILE, NAME); \ | |
171 | + fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \ | |
172 | + } \ | |
173 | + ASM_OUTPUT_LABEL(FILE, NAME); \ | |
174 | + } while (0) | |
175 | + | |
176 | + /* Output the size directive for a decl in rest_of_decl_compilation | |
177 | + in the case where we did not do so before the initializer. | |
178 | + Once we find the error_mark_node, we know that the value of | |
179 | + size_directive_output was set | |
180 | + by ASM_DECLARE_OBJECT_NAME when it was run for the same decl. */ | |
181 | + | |
182 | + #define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \ | |
183 | + do { \ | |
184 | + char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \ | |
185 | + if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \ | |
186 | + && ! AT_END && TOP_LEVEL \ | |
187 | + && DECL_INITIAL (DECL) == error_mark_node \ | |
188 | + && !size_directive_output) \ | |
189 | + { \ | |
190 | + fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \ | |
191 | + assemble_name (FILE, name); \ | |
192 | + fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL)));\ | |
193 | + } \ | |
194 | + } while (0) | |
195 | + | |
196 | + | |
197 | + /* This is how to declare the size of a function. */ | |
198 | + | |
199 | + #define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \ | |
200 | + do { \ | |
201 | + if (!flag_inhibit_size_directive) \ | |
202 | + { \ | |
203 | + char label[256]; \ | |
204 | + static int labelno; \ | |
205 | + labelno++; \ | |
206 | + ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno); \ | |
207 | + ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno); \ | |
208 | + fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \ | |
209 | + assemble_name (FILE, (FNAME)); \ | |
210 | + fprintf (FILE, ","); \ | |
211 | + assemble_name (FILE, label); \ | |
212 | + fprintf (FILE, "-"); \ | |
213 | + assemble_name (FILE, (FNAME)); \ | |
214 | + putc ('\n', FILE); \ | |
215 | + } \ | |
216 | + } while (0) | |
217 | + | |
218 | + #define ASM_SPEC " %| %{fpic:-k} %{fPIC:-k}" | |
219 | + #define LINK_SPEC \ | |
220 | + "%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{static:-Bstatic} %{assert*}" | |
221 | + | |
222 | + #define CUSTOM_DEFAULT_COMPILERS \ | |
223 | + /***** ljo's Fortran rule *****/ \ | |
224 | + {".f", "@f2c"}, \ | |
225 | + {"@f2c", \ | |
226 | + "f2c %{checksubscripts:-C} %{I2} %{onetrip} %{honorcase:-U} %{u} %{w}\ | |
227 | + %{ANSIC:-A} %{a} %{C++}\ | |
228 | + %{c} %{E} %{ec} %{ext} %{f} %{72} %{g} %{h} %{i2} %{kr}\ | |
229 | + %{P} %{p} %{r} %{r8} %{s} %{w8} %{z} %{N*}\ | |
230 | + %i %{!pipe: -o %g.c} %{pipe:-o -}|\n", \ | |
231 | + "gcpp -lang-c %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %I\ | |
232 | + %{C:%{!E:%eGNU C does not support -C without using -E}}\ | |
233 | + %{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d}\ | |
234 | + -undef -D__GNUC__=2 %{ansi:-trigraphs -$ -D__STRICT_ANSI__}\ | |
235 | + %{!undef:%{!ansi:%p} %P} %{trigraphs} \ | |
236 | + %c %{O*:%{!O0:-D__OPTIMIZE__}} %{traditional} %{ftraditional:-traditional}\ | |
237 | + %{traditional-cpp:-traditional}\ | |
238 | + %{g*} %{W*} %{w} %{pedantic*} %{H} %{d*} %C %{D*} %{U*} %{i*}\ | |
239 | + %{pipe:-} %{!pipe:%g.c} %{!M:%{!MM:%{!E:%{!pipe:%g.i}}}}%{E:%W{o*}}%{M:%W{o*}}%{MM:%W{o*}} |\n", \ | |
240 | + "%{!M:%{!MM:%{!E:gcc1 %{!pipe:%g.i} %1 \ | |
241 | + %{!Q:-quiet} -dumpbase %b.c %{d*} %{m*} %{a}\ | |
242 | + %{g*} %{O*} %{W*} %{w} %{pedantic*} %{ansi} \ | |
243 | + %{traditional} %{v:-version} %{pg:-p} %{p} %{f*}\ | |
244 | + %{aux-info*}\ | |
245 | + %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\ | |
246 | + %{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n\ | |
247 | + %{!S:as %{R} %{j} %{J} %{h} %{d2} %a %Y\ | |
248 | + %{c:%W{o*}%{!o*:-o %w%b.o}}%{!c:-o %d%w%u.o}\ | |
249 | + %{!pipe:%g.s} %A\n }}}}"}, \ | |
250 | + /***** End of ljo's Fortran rule *****/ | |
251 | + | |
252 | + /* This section stolen from i386/osfrose.h */ | |
253 | + | |
254 | + /* A C statement or compound statement to output to FILE some | |
255 | + assembler code to initialize basic-block profiling for the current | |
256 | + object module. This code should call the subroutine | |
257 | + `__bb_init_func' once per object module, passing it as its sole | |
258 | + argument the address of a block allocated in the object module. | |
259 | + | |
260 | + The name of the block is a local symbol made with this statement: | |
261 | + | |
262 | + ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 0); | |
263 | + | |
264 | + Of course, since you are writing the definition of | |
265 | + `ASM_GENERATE_INTERNAL_LABEL' as well as that of this macro, you | |
266 | + can take a short cut in the definition of this macro and use the | |
267 | + name that you know will result. | |
268 | + | |
269 | + The first word of this block is a flag which will be nonzero if the | |
270 | + object module has already been initialized. So test this word | |
271 | + first, and do not call `__bb_init_func' if the flag is nonzero. */ | |
272 | + | |
273 | + #undef FUNCTION_BLOCK_PROFILER | |
274 | + #define FUNCTION_BLOCK_PROFILER(STREAM, LABELNO) \ | |
275 | + do \ | |
276 | + { \ | |
277 | + if (!flag_pic) \ | |
278 | + { \ | |
279 | + fprintf (STREAM, "\tcmpl $0,%sPBX0\n", LPREFIX); \ | |
280 | + fprintf (STREAM, "\tjne 0f\n"); \ | |
281 | + fprintf (STREAM, "\tpushl $%sPBX0\n", LPREFIX); \ | |
282 | + fprintf (STREAM, "\tcall ___bb_init_func\n"); \ | |
283 | + fprintf (STREAM, "0:\n"); \ | |
284 | + } \ | |
285 | + else \ | |
286 | + { \ | |
287 | + fprintf (STREAM, "\tpushl %eax\n"); \ | |
288 | + fprintf (STREAM, "\tmovl %sPBX0@GOT(%ebx),%eax\n"); \ | |
289 | + fprintf (STREAM, "\tcmpl $0,(%eax)\n"); \ | |
290 | + fprintf (STREAM, "\tjne 0f\n"); \ | |
291 | + fprintf (STREAM, "\tpushl %eax\n"); \ | |
292 | + fprintf (STREAM, "\tcall ___bb_init_func@PLT\n"); \ | |
293 | + fprintf (STREAM, "0:\n"); \ | |
294 | + fprintf (STREAM, "\tpopl %eax\n"); \ | |
295 | + } \ | |
296 | + } \ | |
297 | + while (0) | |
298 | + | |
299 | + /* A C statement or compound statement to increment the count | |
300 | + associated with the basic block number BLOCKNO. Basic blocks are | |
301 | + numbered separately from zero within each compilation. The count | |
302 | + associated with block number BLOCKNO is at index BLOCKNO in a | |
303 | + vector of words; the name of this array is a local symbol made | |
304 | + with this statement: | |
305 | + | |
306 | + ASM_GENERATE_INTERNAL_LABEL (BUFFER, "LPBX", 2); | |
307 | + | |
308 | + Of course, since you are writing the definition of | |
309 | + `ASM_GENERATE_INTERNAL_LABEL' as well as that of this macro, you | |
310 | + can take a short cut in the definition of this macro and use the | |
311 | + name that you know will result. */ | |
312 | + | |
313 | + #undef BLOCK_PROFILER | |
314 | + #define BLOCK_PROFILER(STREAM, BLOCKNO) \ | |
315 | + do \ | |
316 | + { \ | |
317 | + if (!flag_pic) \ | |
318 | + fprintf (STREAM, "\tincl %sPBX2+%d\n", LPREFIX, (BLOCKNO)*4); \ | |
319 | + else \ | |
320 | + { \ | |
321 | + fprintf (STREAM, "\tpushl %eax\n"); \ | |
322 | + fprintf (STREAM, "\tmovl %sPBX2@GOT(%ebx),%eax\n", LPREFIX); \ | |
323 | + fprintf (STREAM, "\tincl %d(%eax)\n", (BLOCKNO)*4); \ | |
324 | + fprintf (STREAM, "\tpopl %eax\n"); \ | |
325 | + } \ | |
326 | + } \ | |
327 | + while (0) | |
328 | + | |
329 | + /* This is defined when gcc is compiled in the BSD-directory-tree, and must | |
330 | + * make up for the gap to all the stuff done in the GNU-makefiles. | |
331 | + * XXX Do these right | |
332 | + */ | |
333 | + | |
334 | + #ifdef FREEBSD_NATIVE | |
335 | + | |
336 | + #undef MD_EXEC_PREFIX | |
337 | + #define MD_EXEC_PREFIX "/usr/libexec/" | |
338 | + | |
339 | + #undef STANDARD_STARTFILE_PREFIX | |
340 | + #define STANDARD_STARTFILE_PREFIX "/usr/lib" | |
341 | + | |
342 | + #define DEFAULT_TARGET_MACHINE "i386-unknown-freebsd_1.0" | |
343 | + #define GPLUSPLUS_INCLUDE_DIR "/usr/local/lib/gcc-lib/i386-unknown-freebsd_1.0/2.5.8/include" | |
344 | + #define TOOL_INCLUDE_DIR "/usr/local/i386-unknown-freebsd_1.0/include" | |
345 | + #define GCC_INCLUDE_DIR "/usr/local/lib/gcc-lib/i386-unknown-freebsd_1.0/2.5.8/include" | |
346 | + | |
347 | + #endif /* FREEBSD_NATIVE */ | |
348 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/config/i386/i386.h gcc-2.5.8/config/i386/i386.h | |
349 | *** gcc-2.5.8.gnu/config/i386/i386.h Wed Oct 13 07:02:27 1993 | |
350 | --- gcc-2.5.8/config/i386/i386.h Sun Feb 27 00:40:56 1994 | |
351 | *************** | |
352 | *** 90,95 **** | |
353 | --- 90,99 ---- | |
354 | the 387 to be used, which is compatible with most calling conventions. */ | |
355 | #define TARGET_FLOAT_RETURNS_IN_80387 (target_flags & 0200) | |
356 | ||
357 | + /* Disable generation of FP sin, cos and sqrt operations for 387. | |
358 | + This is because FreeBSD lacks these in the math-emulator-code */ | |
359 | + #define TARGET_NO_FANCY_MATH_387 (target_flags & 0400) | |
360 | + | |
361 | /* Macro to define tables used to set the flags. | |
362 | This is a list in braces of pairs in braces, | |
363 | each pair being { "NAME", VALUE } | |
364 | *************** | |
365 | *** 114,119 **** | |
366 | --- 118,125 ---- | |
367 | { "no-ieee-fp", -0100}, \ | |
368 | { "fp-ret-in-387", 0200}, \ | |
369 | { "no-fp-ret-in-387", -0200}, \ | |
370 | + { "no-fancy-math-387", 0400}, \ | |
371 | + { "fancy-math-387", -0400}, \ | |
372 | SUBTARGET_SWITCHES \ | |
373 | { "", TARGET_DEFAULT | TARGET_CPU_DEFAULT}} | |
374 | ||
375 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/config/i386/i386.md gcc-2.5.8/config/i386/i386.md | |
376 | *** gcc-2.5.8.gnu/config/i386/i386.md Tue Oct 5 06:43:30 1993 | |
377 | --- gcc-2.5.8/config/i386/i386.md Sun Feb 27 00:40:59 1994 | |
378 | *************** | |
379 | *** 2935,3012 **** | |
380 | (define_insn "sqrtsf2" | |
381 | [(set (match_operand:SF 0 "register_operand" "=f") | |
382 | (sqrt:SF (match_operand:SF 1 "general_operand" "0")))] | |
383 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" | |
384 | "fsqrt") | |
385 | ||
386 | (define_insn "sqrtdf2" | |
387 | [(set (match_operand:DF 0 "register_operand" "=f") | |
388 | (sqrt:DF (match_operand:DF 1 "general_operand" "0")))] | |
389 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" | |
390 | "fsqrt") | |
391 | ||
392 | (define_insn "" | |
393 | [(set (match_operand:DF 0 "register_operand" "=f") | |
394 | (sqrt:DF (float_extend:DF | |
395 | (match_operand:SF 1 "general_operand" "0"))))] | |
396 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" | |
397 | "fsqrt") | |
398 | ||
399 | (define_insn "sqrtxf2" | |
400 | [(set (match_operand:XF 0 "register_operand" "=f") | |
401 | (sqrt:XF (match_operand:XF 1 "general_operand" "0")))] | |
402 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" | |
403 | "fsqrt") | |
404 | ||
405 | (define_insn "" | |
406 | [(set (match_operand:XF 0 "register_operand" "=f") | |
407 | (sqrt:XF (float_extend:XF | |
408 | (match_operand:DF 1 "general_operand" "0"))))] | |
409 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" | |
410 | "fsqrt") | |
411 | ||
412 | (define_insn "" | |
413 | [(set (match_operand:XF 0 "register_operand" "=f") | |
414 | (sqrt:XF (float_extend:XF | |
415 | (match_operand:SF 1 "general_operand" "0"))))] | |
416 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" | |
417 | "fsqrt") | |
418 | ||
419 | (define_insn "sindf2" | |
420 | [(set (match_operand:DF 0 "register_operand" "=f") | |
421 | (unspec:DF [(match_operand:DF 1 "register_operand" "0")] 1))] | |
422 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" | |
423 | "fsin") | |
424 | ||
425 | (define_insn "sinsf2" | |
426 | [(set (match_operand:SF 0 "register_operand" "=f") | |
427 | (unspec:SF [(match_operand:SF 1 "register_operand" "0")] 1))] | |
428 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" | |
429 | "fsin") | |
430 | ||
431 | (define_insn "" | |
432 | [(set (match_operand:DF 0 "register_operand" "=f") | |
433 | (unspec:DF [(float_extend:DF | |
434 | (match_operand:SF 1 "register_operand" "0"))] 1))] | |
435 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" | |
436 | "fsin") | |
437 | ||
438 | (define_insn "cosdf2" | |
439 | [(set (match_operand:DF 0 "register_operand" "=f") | |
440 | (unspec:DF [(match_operand:DF 1 "register_operand" "0")] 2))] | |
441 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" | |
442 | "fcos") | |
443 | ||
444 | (define_insn "cossf2" | |
445 | [(set (match_operand:SF 0 "register_operand" "=f") | |
446 | (unspec:SF [(match_operand:SF 1 "register_operand" "0")] 2))] | |
447 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" | |
448 | "fcos") | |
449 | ||
450 | (define_insn "" | |
451 | [(set (match_operand:DF 0 "register_operand" "=f") | |
452 | (unspec:DF [(float_extend:DF | |
453 | (match_operand:SF 1 "register_operand" "0"))] 2))] | |
454 | ! "TARGET_80387 && (TARGET_IEEE_FP || flag_fast_math)" | |
455 | "fcos") | |
456 | \f | |
457 | ;;- one complement instructions | |
458 | --- 2935,3024 ---- | |
459 | (define_insn "sqrtsf2" | |
460 | [(set (match_operand:SF 0 "register_operand" "=f") | |
461 | (sqrt:SF (match_operand:SF 1 "general_operand" "0")))] | |
462 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && | |
463 | ! (TARGET_IEEE_FP || flag_fast_math) " | |
464 | "fsqrt") | |
465 | ||
466 | (define_insn "sqrtdf2" | |
467 | [(set (match_operand:DF 0 "register_operand" "=f") | |
468 | (sqrt:DF (match_operand:DF 1 "general_operand" "0")))] | |
469 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && | |
470 | ! (TARGET_IEEE_FP || flag_fast_math) " | |
471 | "fsqrt") | |
472 | ||
473 | (define_insn "" | |
474 | [(set (match_operand:DF 0 "register_operand" "=f") | |
475 | (sqrt:DF (float_extend:DF | |
476 | (match_operand:SF 1 "general_operand" "0"))))] | |
477 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && | |
478 | ! (TARGET_IEEE_FP || flag_fast_math) " | |
479 | "fsqrt") | |
480 | ||
481 | (define_insn "sqrtxf2" | |
482 | [(set (match_operand:XF 0 "register_operand" "=f") | |
483 | (sqrt:XF (match_operand:XF 1 "general_operand" "0")))] | |
484 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && | |
485 | ! (TARGET_IEEE_FP || flag_fast_math) " | |
486 | "fsqrt") | |
487 | ||
488 | (define_insn "" | |
489 | [(set (match_operand:XF 0 "register_operand" "=f") | |
490 | (sqrt:XF (float_extend:XF | |
491 | (match_operand:DF 1 "general_operand" "0"))))] | |
492 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && | |
493 | ! (TARGET_IEEE_FP || flag_fast_math) " | |
494 | "fsqrt") | |
495 | ||
496 | (define_insn "" | |
497 | [(set (match_operand:XF 0 "register_operand" "=f") | |
498 | (sqrt:XF (float_extend:XF | |
499 | (match_operand:SF 1 "general_operand" "0"))))] | |
500 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && | |
501 | ! (TARGET_IEEE_FP || flag_fast_math) " | |
502 | "fsqrt") | |
503 | ||
504 | (define_insn "sindf2" | |
505 | [(set (match_operand:DF 0 "register_operand" "=f") | |
506 | (unspec:DF [(match_operand:DF 1 "register_operand" "0")] 1))] | |
507 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && | |
508 | ! (TARGET_IEEE_FP || flag_fast_math) " | |
509 | "fsin") | |
510 | ||
511 | (define_insn "sinsf2" | |
512 | [(set (match_operand:SF 0 "register_operand" "=f") | |
513 | (unspec:SF [(match_operand:SF 1 "register_operand" "0")] 1))] | |
514 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && | |
515 | ! (TARGET_IEEE_FP || flag_fast_math) " | |
516 | "fsin") | |
517 | ||
518 | (define_insn "" | |
519 | [(set (match_operand:DF 0 "register_operand" "=f") | |
520 | (unspec:DF [(float_extend:DF | |
521 | (match_operand:SF 1 "register_operand" "0"))] 1))] | |
522 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && | |
523 | ! (TARGET_IEEE_FP || flag_fast_math) " | |
524 | "fsin") | |
525 | ||
526 | (define_insn "cosdf2" | |
527 | [(set (match_operand:DF 0 "register_operand" "=f") | |
528 | (unspec:DF [(match_operand:DF 1 "register_operand" "0")] 2))] | |
529 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && | |
530 | ! (TARGET_IEEE_FP || flag_fast_math) " | |
531 | "fcos") | |
532 | ||
533 | (define_insn "cossf2" | |
534 | [(set (match_operand:SF 0 "register_operand" "=f") | |
535 | (unspec:SF [(match_operand:SF 1 "register_operand" "0")] 2))] | |
536 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && | |
537 | ! (TARGET_IEEE_FP || flag_fast_math) " | |
538 | "fcos") | |
539 | ||
540 | (define_insn "" | |
541 | [(set (match_operand:DF 0 "register_operand" "=f") | |
542 | (unspec:DF [(float_extend:DF | |
543 | (match_operand:SF 1 "register_operand" "0"))] 2))] | |
544 | ! "(!TARGET_NO_FANCY_MATH_387) && TARGET_80387 && | |
545 | ! (TARGET_IEEE_FP || flag_fast_math) " | |
546 | "fcos") | |
547 | \f | |
548 | ;;- one complement instructions | |
549 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/config.guess gcc-2.5.8/config.guess | |
550 | *** gcc-2.5.8.gnu/config.guess Sun Dec 12 12:50:10 1993 | |
551 | --- gcc-2.5.8/config.guess Sun Feb 27 00:41:00 1994 | |
552 | *************** | |
553 | *** 171,176 **** | |
554 | --- 171,179 ---- | |
555 | hp3[0-9][05]:NetBSD:*:*) | |
556 | echo m68k-hp-netbsd${UNAME_RELEASE} | |
557 | exit 0 ;; | |
558 | + i[34]86:FreeBSD:*:*) | |
559 | + echo ${UNAME_MACHINE}-unknown-freebsd | |
560 | + exit 0 ;; | |
561 | i[34]86:NetBSD:*:*) | |
562 | echo ${UNAME_MACHINE}-unknown-netbsd${UNAME_RELEASE} | |
563 | exit 0 ;; | |
564 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/config.sub gcc-2.5.8/config.sub | |
565 | *** gcc-2.5.8.gnu/config.sub Thu Jan 13 11:43:23 1994 | |
566 | --- gcc-2.5.8/config.sub Sun Feb 27 00:41:00 1994 | |
567 | *************** | |
568 | *** 534,540 **** | |
569 | | -amigados* | -msdos* | -newsos* | -unicos* | -aos* \ | |
570 | | -nindy* | -vxworks* | -ebmon* | -hms* | -mvs* | -clix* \ | |
571 | | -riscos* | -linux* | -uniplus* | -iris* | -rtu* | -xenix* \ | |
572 | ! | -hiux* | -386bsd* | -netbsd* | -riscix* | -lynxos*) | |
573 | ;; | |
574 | -sunos5*) | |
575 | os=`echo $os | sed -e 's|sunos5|solaris2|'` | |
576 | --- 534,540 ---- | |
577 | | -amigados* | -msdos* | -newsos* | -unicos* | -aos* \ | |
578 | | -nindy* | -vxworks* | -ebmon* | -hms* | -mvs* | -clix* \ | |
579 | | -riscos* | -linux* | -uniplus* | -iris* | -rtu* | -xenix* \ | |
580 | ! | -hiux* | -386bsd* | -netbsd* | -riscix* | -lynxos* | -freebsd*) | |
581 | ;; | |
582 | -sunos5*) | |
583 | os=`echo $os | sed -e 's|sunos5|solaris2|'` | |
584 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/configure gcc-2.5.8/configure | |
585 | *** gcc-2.5.8.gnu/configure Fri Nov 19 22:44:16 1993 | |
586 | --- gcc-2.5.8/configure Sun Feb 27 00:41:03 1994 | |
587 | *************** | |
588 | *** 385,390 **** | |
589 | --- 385,394 ---- | |
590 | tmake_file=i386/t-next | |
591 | xmake_file=i386/x-next | |
592 | ;; | |
593 | + i[34]86-*-freebsd*) | |
594 | + cpu_type=i386 | |
595 | + tm_file=i386/freebsd.h | |
596 | + ;; | |
597 | i[34]86-*-bsd*) | |
598 | cpu_type=i386 | |
599 | tm_file=i386/386bsd.h | |
600 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/expmed.c gcc-2.5.8/expmed.c | |
601 | *** gcc-2.5.8.gnu/expmed.c Sun Nov 14 04:50:40 1993 | |
602 | --- gcc-2.5.8/expmed.c Sun Feb 27 22:17:01 1994 | |
603 | *************** | |
604 | *** 1,6 **** | |
605 | /* Medium-level subroutines: convert bit-field store and extract | |
606 | and shifts, multiplies and divides to rtl instructions. | |
607 | ! Copyright (C) 1987, 1988, 1989, 1992, 1993 Free Software Foundation, Inc. | |
608 | ||
609 | This file is part of GNU CC. | |
610 | ||
611 | --- 1,6 ---- | |
612 | /* Medium-level subroutines: convert bit-field store and extract | |
613 | and shifts, multiplies and divides to rtl instructions. | |
614 | ! Copyright (C) 1987, 88, 89, 92, 93, 1994 Free Software Foundation, Inc. | |
615 | ||
616 | This file is part of GNU CC. | |
617 | ||
618 | *************** | |
619 | *** 421,427 **** | |
620 | /* If xop0 is a register, we need it in MAXMODE | |
621 | to make it acceptable to the format of insv. */ | |
622 | if (GET_CODE (xop0) == SUBREG) | |
623 | ! PUT_MODE (xop0, maxmode); | |
624 | if (GET_CODE (xop0) == REG && GET_MODE (xop0) != maxmode) | |
625 | xop0 = gen_rtx (SUBREG, maxmode, xop0, 0); | |
626 | ||
627 | --- 421,429 ---- | |
628 | /* If xop0 is a register, we need it in MAXMODE | |
629 | to make it acceptable to the format of insv. */ | |
630 | if (GET_CODE (xop0) == SUBREG) | |
631 | ! /* We can't just change the mode, because this might clobber op0, | |
632 | ! and we will need the original value of op0 if insv fails. */ | |
633 | ! xop0 = gen_rtx (SUBREG, maxmode, SUBREG_REG (xop0), SUBREG_WORD (xop0)); | |
634 | if (GET_CODE (xop0) == REG && GET_MODE (xop0) != maxmode) | |
635 | xop0 = gen_rtx (SUBREG, maxmode, xop0, 0); | |
636 | ||
637 | *************** | |
638 | *** 556,561 **** | |
639 | --- 558,573 ---- | |
640 | ||
641 | total_bits = GET_MODE_BITSIZE (mode); | |
642 | ||
643 | + /* Make sure bitpos is valid for the chosen mode. Adjust BITPOS to | |
644 | + be be in the range 0 to total_bits-1, and put any excess bytes in | |
645 | + OFFSET. */ | |
646 | + if (bitpos >= total_bits) | |
647 | + { | |
648 | + offset += (bitpos / total_bits) * (total_bits / BITS_PER_UNIT); | |
649 | + bitpos -= ((bitpos / total_bits) * (total_bits / BITS_PER_UNIT) | |
650 | + * BITS_PER_UNIT); | |
651 | + } | |
652 | + | |
653 | /* Get ref to an aligned byte, halfword, or word containing the field. | |
654 | Adjust BITPOS to be position within a word, | |
655 | and OFFSET to be the offset of that word. | |
656 | *************** | |
657 | *** 691,697 **** | |
658 | { | |
659 | rtx word = gen_lowpart_common (word_mode, value); | |
660 | ||
661 | ! if (word) | |
662 | value = word; | |
663 | else | |
664 | value = gen_lowpart_common (word_mode, | |
665 | --- 703,709 ---- | |
666 | { | |
667 | rtx word = gen_lowpart_common (word_mode, value); | |
668 | ||
669 | ! if (word && (value != word)) | |
670 | value = word; | |
671 | else | |
672 | value = gen_lowpart_common (word_mode, | |
673 | *************** | |
674 | *** 721,731 **** | |
675 | >> (bitsize - bitsdone - thissize)) | |
676 | & (((HOST_WIDE_INT) 1 << thissize) - 1)); | |
677 | else | |
678 | ! /* The args are chosen so that the last part | |
679 | ! includes the lsb. */ | |
680 | ! part = extract_fixed_bit_field (word_mode, value, 0, thissize, | |
681 | ! BITS_PER_WORD - bitsize + bitsdone, | |
682 | ! NULL_RTX, 1, align); | |
683 | #else | |
684 | /* Fetch successively more significant portions. */ | |
685 | if (GET_CODE (value) == CONST_INT) | |
686 | --- 733,751 ---- | |
687 | >> (bitsize - bitsdone - thissize)) | |
688 | & (((HOST_WIDE_INT) 1 << thissize) - 1)); | |
689 | else | |
690 | ! { | |
691 | ! /* The args are chosen so that the last part | |
692 | ! includes the lsb. */ | |
693 | ! int bit_offset = 0; | |
694 | ! /* If the value isn't in memory, then it must be right aligned | |
695 | ! if a register, so skip past the padding on the left. If it | |
696 | ! is in memory, then there is no padding on the left. */ | |
697 | ! if (GET_CODE (value) != MEM) | |
698 | ! bit_offset = BITS_PER_WORD - bitsize; | |
699 | ! part = extract_fixed_bit_field (word_mode, value, 0, thissize, | |
700 | ! bit_offset + bitsdone, | |
701 | ! NULL_RTX, 1, align); | |
702 | ! } | |
703 | #else | |
704 | /* Fetch successively more significant portions. */ | |
705 | if (GET_CODE (value) == CONST_INT) | |
706 | *************** | |
707 | *** 1592,1597 **** | |
708 | --- 1612,1625 ---- | |
709 | ||
710 | op1 = expand_expr (amount, NULL_RTX, VOIDmode, 0); | |
711 | ||
712 | + #if SHIFT_COUNT_TRUNCATED | |
713 | + if (SHIFT_COUNT_TRUNCATED | |
714 | + && GET_CODE (op1) == CONST_INT | |
715 | + && (unsigned HOST_WIDE_INT) INTVAL (op1) >= GET_MODE_BITSIZE (mode)) | |
716 | + op1 = GEN_INT ((unsigned HOST_WIDE_INT) INTVAL (op1) | |
717 | + % GET_MODE_BITSIZE (mode)); | |
718 | + #endif | |
719 | + | |
720 | if (op1 == const0_rtx) | |
721 | return shifted; | |
722 | ||
723 | *************** | |
724 | *** 1843,1852 **** | |
725 | int cost_limit; | |
726 | { | |
727 | int m; | |
728 | ! struct algorithm *best_alg | |
729 | ! = (struct algorithm *)alloca (sizeof (struct algorithm)); | |
730 | ! struct algorithm *alg_in | |
731 | ! = (struct algorithm *)alloca (sizeof (struct algorithm)); | |
732 | unsigned int cost; | |
733 | unsigned HOST_WIDE_INT q; | |
734 | ||
735 | --- 1871,1877 ---- | |
736 | int cost_limit; | |
737 | { | |
738 | int m; | |
739 | ! struct algorithm *alg_in, *best_alg; | |
740 | unsigned int cost; | |
741 | unsigned HOST_WIDE_INT q; | |
742 | ||
743 | *************** | |
744 | *** 1881,1886 **** | |
745 | --- 1906,1916 ---- | |
746 | } | |
747 | } | |
748 | ||
749 | + /* We'll be needing a couple extra algorithm structures now. */ | |
750 | + | |
751 | + alg_in = (struct algorithm *)alloca (sizeof (struct algorithm)); | |
752 | + best_alg = (struct algorithm *)alloca (sizeof (struct algorithm)); | |
753 | + | |
754 | /* If we have a group of zero bits at the low-order part of T, try | |
755 | multiplying by the remaining bits and then doing a shift. */ | |
756 | ||
757 | *************** | |
758 | *** 2043,2058 **** | |
759 | } | |
760 | } | |
761 | ||
762 | - /* If we are getting a too long sequence for `struct algorithm' | |
763 | - to record, make this search fail. */ | |
764 | - if (best_alg->ops == MAX_BITS_PER_WORD) | |
765 | - return; | |
766 | - | |
767 | /* If cost_limit has not decreased since we stored it in alg_out->cost, | |
768 | we have not found any algorithm. */ | |
769 | if (cost_limit == alg_out->cost) | |
770 | return; | |
771 | ||
772 | /* Copy the algorithm from temporary space to the space at alg_out. | |
773 | We avoid using structure assignment because the majority of | |
774 | best_alg is normally undefined, and this is a critical function. */ | |
775 | --- 2073,2088 ---- | |
776 | } | |
777 | } | |
778 | ||
779 | /* If cost_limit has not decreased since we stored it in alg_out->cost, | |
780 | we have not found any algorithm. */ | |
781 | if (cost_limit == alg_out->cost) | |
782 | return; | |
783 | ||
784 | + /* If we are getting a too long sequence for `struct algorithm' | |
785 | + to record, make this search fail. */ | |
786 | + if (best_alg->ops == MAX_BITS_PER_WORD) | |
787 | + return; | |
788 | + | |
789 | /* Copy the algorithm from temporary space to the space at alg_out. | |
790 | We avoid using structure assignment because the majority of | |
791 | best_alg is normally undefined, and this is a critical function. */ | |
792 | *************** | |
793 | *** 2153,2161 **** | |
794 | for (opno = 1; opno < alg.ops; opno++) | |
795 | { | |
796 | int log = alg.log[opno]; | |
797 | ! rtx shift_subtarget = preserve_subexpressions_p () ? 0 : accum; | |
798 | rtx add_target = opno == alg.ops - 1 && target != 0 ? target : 0; | |
799 | ! | |
800 | switch (alg.op[opno]) | |
801 | { | |
802 | case alg_shift: | |
803 | --- 2183,2193 ---- | |
804 | for (opno = 1; opno < alg.ops; opno++) | |
805 | { | |
806 | int log = alg.log[opno]; | |
807 | ! int preserve = preserve_subexpressions_p (); | |
808 | ! rtx shift_subtarget = preserve ? 0 : accum; | |
809 | rtx add_target = opno == alg.ops - 1 && target != 0 ? target : 0; | |
810 | ! rtx accum_target = preserve ? 0 : accum; | |
811 | ! | |
812 | switch (alg.op[opno]) | |
813 | { | |
814 | case alg_shift: | |
815 | *************** | |
816 | *** 2168,2174 **** | |
817 | tem = expand_shift (LSHIFT_EXPR, mode, op0, | |
818 | build_int_2 (log, 0), NULL_RTX, 0); | |
819 | accum = force_operand (gen_rtx (PLUS, mode, accum, tem), | |
820 | ! add_target ? add_target : accum); | |
821 | val_so_far += (HOST_WIDE_INT) 1 << log; | |
822 | break; | |
823 | ||
824 | --- 2200,2206 ---- | |
825 | tem = expand_shift (LSHIFT_EXPR, mode, op0, | |
826 | build_int_2 (log, 0), NULL_RTX, 0); | |
827 | accum = force_operand (gen_rtx (PLUS, mode, accum, tem), | |
828 | ! add_target ? add_target : accum_target); | |
829 | val_so_far += (HOST_WIDE_INT) 1 << log; | |
830 | break; | |
831 | ||
832 | *************** | |
833 | *** 2176,2198 **** | |
834 | tem = expand_shift (LSHIFT_EXPR, mode, op0, | |
835 | build_int_2 (log, 0), NULL_RTX, 0); | |
836 | accum = force_operand (gen_rtx (MINUS, mode, accum, tem), | |
837 | ! add_target ? add_target : accum); | |
838 | val_so_far -= (HOST_WIDE_INT) 1 << log; | |
839 | break; | |
840 | ||
841 | case alg_add_t2_m: | |
842 | accum = expand_shift (LSHIFT_EXPR, mode, accum, | |
843 | ! build_int_2 (log, 0), accum, 0); | |
844 | accum = force_operand (gen_rtx (PLUS, mode, accum, op0), | |
845 | ! add_target ? add_target : accum); | |
846 | val_so_far = (val_so_far << log) + 1; | |
847 | break; | |
848 | ||
849 | case alg_sub_t2_m: | |
850 | accum = expand_shift (LSHIFT_EXPR, mode, accum, | |
851 | ! build_int_2 (log, 0), accum, 0); | |
852 | accum = force_operand (gen_rtx (MINUS, mode, accum, op0), | |
853 | ! add_target ? add_target : accum); | |
854 | val_so_far = (val_so_far << log) - 1; | |
855 | break; | |
856 | ||
857 | --- 2208,2232 ---- | |
858 | tem = expand_shift (LSHIFT_EXPR, mode, op0, | |
859 | build_int_2 (log, 0), NULL_RTX, 0); | |
860 | accum = force_operand (gen_rtx (MINUS, mode, accum, tem), | |
861 | ! add_target ? add_target : accum_target); | |
862 | val_so_far -= (HOST_WIDE_INT) 1 << log; | |
863 | break; | |
864 | ||
865 | case alg_add_t2_m: | |
866 | accum = expand_shift (LSHIFT_EXPR, mode, accum, | |
867 | ! build_int_2 (log, 0), shift_subtarget, | |
868 | ! 0); | |
869 | accum = force_operand (gen_rtx (PLUS, mode, accum, op0), | |
870 | ! add_target ? add_target : accum_target); | |
871 | val_so_far = (val_so_far << log) + 1; | |
872 | break; | |
873 | ||
874 | case alg_sub_t2_m: | |
875 | accum = expand_shift (LSHIFT_EXPR, mode, accum, | |
876 | ! build_int_2 (log, 0), shift_subtarget, | |
877 | ! 0); | |
878 | accum = force_operand (gen_rtx (MINUS, mode, accum, op0), | |
879 | ! add_target ? add_target : accum_target); | |
880 | val_so_far = (val_so_far << log) - 1; | |
881 | break; | |
882 | ||
883 | *************** | |
884 | *** 2200,2206 **** | |
885 | tem = expand_shift (LSHIFT_EXPR, mode, accum, | |
886 | build_int_2 (log, 0), NULL_RTX, 0); | |
887 | accum = force_operand (gen_rtx (PLUS, mode, accum, tem), | |
888 | ! add_target ? add_target : accum); | |
889 | val_so_far += val_so_far << log; | |
890 | break; | |
891 | ||
892 | --- 2234,2240 ---- | |
893 | tem = expand_shift (LSHIFT_EXPR, mode, accum, | |
894 | build_int_2 (log, 0), NULL_RTX, 0); | |
895 | accum = force_operand (gen_rtx (PLUS, mode, accum, tem), | |
896 | ! add_target ? add_target : accum_target); | |
897 | val_so_far += val_so_far << log; | |
898 | break; | |
899 | ||
900 | *************** | |
901 | *** 2208,2214 **** | |
902 | tem = expand_shift (LSHIFT_EXPR, mode, accum, | |
903 | build_int_2 (log, 0), NULL_RTX, 0); | |
904 | accum = force_operand (gen_rtx (MINUS, mode, tem, accum), | |
905 | ! add_target ? add_target : tem); | |
906 | val_so_far = (val_so_far << log) - val_so_far; | |
907 | break; | |
908 | ||
909 | --- 2242,2249 ---- | |
910 | tem = expand_shift (LSHIFT_EXPR, mode, accum, | |
911 | build_int_2 (log, 0), NULL_RTX, 0); | |
912 | accum = force_operand (gen_rtx (MINUS, mode, tem, accum), | |
913 | ! (add_target ? add_target | |
914 | ! : preserve ? 0 : tem)); | |
915 | val_so_far = (val_so_far << log) - val_so_far; | |
916 | break; | |
917 | ||
918 | *************** | |
919 | *** 3196,3198 **** | |
920 | --- 3231,3234 ---- | |
921 | ||
922 | return tem; | |
923 | } | |
924 | + | |
925 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/gcc.c gcc-2.5.8/gcc.c | |
926 | *** gcc-2.5.8.gnu/gcc.c Thu Dec 23 23:49:43 1993 | |
927 | --- gcc-2.5.8/gcc.c Sun Feb 27 00:41:06 1994 | |
928 | *************** | |
929 | *** 586,591 **** | |
930 | --- 586,594 ---- | |
931 | "%{!S:%{!gnatc:%{!gnats:as %{R} %{j} %{J} %{h} %{d2} %a %Y\ | |
932 | %{c:%W{o*}%{!o*:-o %w%b.o}}%{!c:-o %d%w%u.o}\ | |
933 | %{!pipe:%g.s} %A\n}}} "}, | |
934 | + #ifdef CUSTOM_DEFAULT_COMPILERS | |
935 | + CUSTOM_DEFAULT_COMPILERS | |
936 | + #endif /* CUSTOM_DEFAULT_COMPILERS */ | |
937 | /* Mark end of table */ | |
938 | {0, 0} | |
939 | }; | |
940 | *************** | |
941 | *** 608,614 **** | |
942 | static char *link_command_spec = "\ | |
943 | %{!fsyntax-only: \ | |
944 | %{!c:%{!M:%{!MM:%{!E:%{!S:ld %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \ | |
945 | ! %{r} %{s} %{t} %{u*} %{x} %{z}\ | |
946 | %{!A:%{!nostartfiles:%{!nostdlib:%S}}} %{static:}\ | |
947 | %{L*} %D %{T*} %o %{!nostdlib:libgcc.a%s %L libgcc.a%s %{!A:%E}}\n }}}}}}"; | |
948 | #else | |
949 | --- 611,617 ---- | |
950 | static char *link_command_spec = "\ | |
951 | %{!fsyntax-only: \ | |
952 | %{!c:%{!M:%{!MM:%{!E:%{!S:ld %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \ | |
953 | ! %{r} %{s} %{t} %{u*} %{x} %{z} %{Z}\ | |
954 | %{!A:%{!nostartfiles:%{!nostdlib:%S}}} %{static:}\ | |
955 | %{L*} %D %{T*} %o %{!nostdlib:libgcc.a%s %L libgcc.a%s %{!A:%E}}\n }}}}}}"; | |
956 | #else | |
957 | *************** | |
958 | *** 617,623 **** | |
959 | static char *link_command_spec = "\ | |
960 | %{!fsyntax-only: \ | |
961 | %{!c:%{!M:%{!MM:%{!E:%{!S:ld %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \ | |
962 | ! %{r} %{s} %{t} %{u*} %{x} %{z}\ | |
963 | %{!A:%{!nostartfiles:%{!nostdlib:%S}}} %{static:}\ | |
964 | %{L*} %{T*} %o %{!nostdlib:libgcc.a%s %L libgcc.a%s %{!A:%E}}\n }}}}}}"; | |
965 | #else | |
966 | --- 620,626 ---- | |
967 | static char *link_command_spec = "\ | |
968 | %{!fsyntax-only: \ | |
969 | %{!c:%{!M:%{!MM:%{!E:%{!S:ld %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \ | |
970 | ! %{r} %{s} %{t} %{u*} %{x} %{z} %{Z}\ | |
971 | %{!A:%{!nostartfiles:%{!nostdlib:%S}}} %{static:}\ | |
972 | %{L*} %{T*} %o %{!nostdlib:libgcc.a%s %L libgcc.a%s %{!A:%E}}\n }}}}}}"; | |
973 | #else | |
974 | *************** | |
975 | *** 625,631 **** | |
976 | static char *link_command_spec = "\ | |
977 | %{!fsyntax-only: \ | |
978 | %{!c:%{!M:%{!MM:%{!E:%{!S:ld %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \ | |
979 | ! %{r} %{s} %{t} %{u*} %{x} %{z}\ | |
980 | %{!A:%{!nostartfiles:%{!nostdlib:%S}}} %{static:}\ | |
981 | %{L*} %D %{T*} %o %{!nostdlib:-lgcc %L -lgcc %{!A:%E}}\n }}}}}}"; | |
982 | #endif | |
983 | --- 628,634 ---- | |
984 | static char *link_command_spec = "\ | |
985 | %{!fsyntax-only: \ | |
986 | %{!c:%{!M:%{!MM:%{!E:%{!S:ld %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} \ | |
987 | ! %{r} %{s} %{t} %{u*} %{x} %{z} %{Z}\ | |
988 | %{!A:%{!nostartfiles:%{!nostdlib:%S}}} %{static:}\ | |
989 | %{L*} %D %{T*} %o %{!nostdlib:-lgcc %L -lgcc %{!A:%E}}\n }}}}}}"; | |
990 | #endif | |
991 | *************** | |
992 | *** 3202,3224 **** | |
993 | { | |
994 | if (! strncmp (y, "-D", 2)) | |
995 | { | |
996 | ! *x++ = *y++; | |
997 | ! *x++ = *y++; | |
998 | ||
999 | if (strncmp (y, "__", 2)) | |
1000 | { | |
1001 | /* Stick __ at front of macro name. */ | |
1002 | *x++ = '_'; | |
1003 | *x++ = '_'; | |
1004 | - } | |
1005 | - | |
1006 | - /* Copy the macro name. */ | |
1007 | - while (*y && *y != '=' && *y != ' ' && *y != '\t') | |
1008 | - *x++ = *y++; | |
1009 | ||
1010 | ! /* Copy the value given, if any. */ | |
1011 | ! while (*y && *y != ' ' && *y != '\t') | |
1012 | ! *x++ = *y++; | |
1013 | } | |
1014 | else if (*y == ' ' || *y == '\t') | |
1015 | /* Copy whitespace to the result. */ | |
1016 | --- 3205,3235 ---- | |
1017 | { | |
1018 | if (! strncmp (y, "-D", 2)) | |
1019 | { | |
1020 | ! y++; | |
1021 | ! y++; | |
1022 | ||
1023 | if (strncmp (y, "__", 2)) | |
1024 | { | |
1025 | + *x++ = '-'; | |
1026 | + *x++ = 'D'; | |
1027 | /* Stick __ at front of macro name. */ | |
1028 | *x++ = '_'; | |
1029 | *x++ = '_'; | |
1030 | ||
1031 | ! /* Copy the macro name. */ | |
1032 | ! while (*y && *y != '=' && *y != ' ' && *y != '\t') | |
1033 | ! *x++ = *y++; | |
1034 | ! | |
1035 | ! /* Copy the value given, if any. */ | |
1036 | ! while (*y && *y != ' ' && *y != '\t') | |
1037 | ! *x++ = *y++; | |
1038 | ! } | |
1039 | ! else | |
1040 | ! { | |
1041 | ! /* Skip this one, we have done it once already */ | |
1042 | ! while (*y && *y != ' ' && *y != '\t') | |
1043 | ! y++; | |
1044 | ! } | |
1045 | } | |
1046 | else if (*y == ' ' || *y == '\t') | |
1047 | /* Copy whitespace to the result. */ | |
1048 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/gstdarg.h gcc-2.5.8/gstdarg.h | |
1049 | *** gcc-2.5.8.gnu/gstdarg.h Sat Nov 13 02:53:58 1993 | |
1050 | --- gcc-2.5.8/gstdarg.h Sun Feb 27 00:41:06 1994 | |
1051 | *************** | |
1052 | *** 136,148 **** | |
1053 | But on BSD NET2 we must not test or define or undef it. | |
1054 | (Note that the comments in NET 2's ansi.h | |
1055 | are incorrect for _VA_LIST_--see stdio.h!) */ | |
1056 | ! #if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) | |
1057 | /* The macro _VA_LIST is used in SCO Unix 3.2. */ | |
1058 | #ifndef _VA_LIST | |
1059 | /* The macro _VA_LIST_T_H is used in the Bull dpx2 */ | |
1060 | #ifndef _VA_LIST_T_H | |
1061 | #define _VA_LIST_T_H | |
1062 | ! #if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__)) | |
1063 | #define _VA_LIST_ | |
1064 | #endif | |
1065 | #define _VA_LIST | |
1066 | --- 136,148 ---- | |
1067 | But on BSD NET2 we must not test or define or undef it. | |
1068 | (Note that the comments in NET 2's ansi.h | |
1069 | are incorrect for _VA_LIST_--see stdio.h!) */ | |
1070 | ! #if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__FreeBSD__) | |
1071 | /* The macro _VA_LIST is used in SCO Unix 3.2. */ | |
1072 | #ifndef _VA_LIST | |
1073 | /* The macro _VA_LIST_T_H is used in the Bull dpx2 */ | |
1074 | #ifndef _VA_LIST_T_H | |
1075 | #define _VA_LIST_T_H | |
1076 | ! #if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__FreeBSD__)) | |
1077 | #define _VA_LIST_ | |
1078 | #endif | |
1079 | #define _VA_LIST | |
1080 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/gstddef.h gcc-2.5.8/gstddef.h | |
1081 | *** gcc-2.5.8.gnu/gstddef.h Fri Dec 3 12:46:59 1993 | |
1082 | --- gcc-2.5.8/gstddef.h Sun Feb 27 00:41:07 1994 | |
1083 | *************** | |
1084 | *** 22,28 **** | |
1085 | ||
1086 | /* On 4.3bsd-net2, make sure ansi.h is included, so we have | |
1087 | one less case to deal with in the following. */ | |
1088 | ! #if defined (__BSD_NET2__) || defined (____386BSD____) | |
1089 | #include <machine/ansi.h> | |
1090 | #endif | |
1091 | ||
1092 | --- 22,28 ---- | |
1093 | ||
1094 | /* On 4.3bsd-net2, make sure ansi.h is included, so we have | |
1095 | one less case to deal with in the following. */ | |
1096 | ! #if defined (__BSD_NET2__) || defined (____386BSD____) || defined (__FreeBSD__) | |
1097 | #include <machine/ansi.h> | |
1098 | #endif | |
1099 | ||
1100 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/gvarargs.h gcc-2.5.8/gvarargs.h | |
1101 | *** gcc-2.5.8.gnu/gvarargs.h Sat Nov 13 09:33:23 1993 | |
1102 | --- gcc-2.5.8/gvarargs.h Sun Feb 27 00:41:07 1994 | |
1103 | *************** | |
1104 | *** 150,162 **** | |
1105 | /* Michael Eriksson <mer@sics.se> at Thu Sep 30 11:00:57 1993: | |
1106 | Sequent defines _VA_LIST_ in <machine/machtypes.h> to be the type to | |
1107 | use for va_list (``typedef _VA_LIST_ va_list'') */ | |
1108 | ! #if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) | |
1109 | /* The macro _VA_LIST is used in SCO Unix 3.2. */ | |
1110 | #ifndef _VA_LIST | |
1111 | /* The macro _VA_LIST_T_H is used in the Bull dpx2 */ | |
1112 | #ifndef _VA_LIST_T_H | |
1113 | #define _VA_LIST_T_H | |
1114 | ! #if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__)) | |
1115 | #define _VA_LIST_ | |
1116 | #endif | |
1117 | #define _VA_LIST | |
1118 | --- 150,162 ---- | |
1119 | /* Michael Eriksson <mer@sics.se> at Thu Sep 30 11:00:57 1993: | |
1120 | Sequent defines _VA_LIST_ in <machine/machtypes.h> to be the type to | |
1121 | use for va_list (``typedef _VA_LIST_ va_list'') */ | |
1122 | ! #if !defined (_VA_LIST_) || defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__) | |
1123 | /* The macro _VA_LIST is used in SCO Unix 3.2. */ | |
1124 | #ifndef _VA_LIST | |
1125 | /* The macro _VA_LIST_T_H is used in the Bull dpx2 */ | |
1126 | #ifndef _VA_LIST_T_H | |
1127 | #define _VA_LIST_T_H | |
1128 | ! #if !(defined (__BSD_NET2__) || defined (____386BSD____) || defined (__bsdi__) || defined (__sequent__) || defined (__FreeBSD__)) | |
1129 | #define _VA_LIST_ | |
1130 | #endif | |
1131 | #define _VA_LIST | |
1132 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/invoke.texi gcc-2.5.8/invoke.texi | |
1133 | *** gcc-2.5.8.gnu/invoke.texi Thu Nov 11 14:31:43 1993 | |
1134 | --- gcc-2.5.8/invoke.texi Sun Feb 27 00:41:10 1994 | |
1135 | *************** | |
1136 | *** 252,258 **** | |
1137 | ||
1138 | @emph{i386 Options} | |
1139 | -m486 -mno-486 -msoft-float -msvr3-shlib -mieee-fp | |
1140 | ! -mno-fp-ret-in-387 | |
1141 | ||
1142 | @emph{HPPA Options} | |
1143 | -mpa-risc-1-0 | |
1144 | --- 252,258 ---- | |
1145 | ||
1146 | @emph{i386 Options} | |
1147 | -m486 -mno-486 -msoft-float -msvr3-shlib -mieee-fp | |
1148 | ! -mno-fp-ret-in-387 -mno-fancy-math-387 | |
1149 | ||
1150 | @emph{HPPA Options} | |
1151 | -mpa-risc-1-0 | |
1152 | *************** | |
1153 | *** 3090,3095 **** | |
1154 | --- 3090,3103 ---- | |
1155 | ||
1156 | The option @samp{-mno-fp-ret-in-387} causes such values to be returned | |
1157 | in ordinary CPU registers instead. | |
1158 | + | |
1159 | + @item -mno-fancy-math-387 | |
1160 | + Do not generate sin, cos and sqrt instructions to the 387. | |
1161 | + | |
1162 | + Some 387-emulators are less complete than one would expect, and usually | |
1163 | + the hard parts are missing, this option fixes one such case for the | |
1164 | + FreeBSD OS, where this option is set as default. | |
1165 | + | |
1166 | @c FIXME!! What about these options listed in @node Option Summary ?? | |
1167 | @c -msvr3-shlib -mieee-fp | |
1168 | @end table | |
1169 | diff -C3 -r --unidirectional-new-file gcc-2.5.8.gnu/objc/objects.c gcc-2.5.8/objc/objects.c | |
1170 | *** gcc-2.5.8.gnu/objc/objects.c Thu Nov 18 09:07:33 1993 | |
1171 | --- gcc-2.5.8/objc/objects.c Sun Feb 27 00:41:11 1994 | |
1172 | *************** | |
1173 | *** 24,30 **** | |
1174 | however invalidate any other reasons why the executable file might be | |
1175 | covered by the GNU General Public License. */ | |
1176 | ||
1177 | ! #include "../tconfig.h" /* include defs of bzero for target */ | |
1178 | #include "runtime.h" /* the kitchen sink */ | |
1179 | ||
1180 | id __objc_object_alloc(Class*); | |
1181 | --- 24,30 ---- | |
1182 | however invalidate any other reasons why the executable file might be | |
1183 | covered by the GNU General Public License. */ | |
1184 | ||
1185 | ! #include "tconfig.h" /* include defs of bzero for target */ | |
1186 | #include "runtime.h" /* the kitchen sink */ | |
1187 | ||
1188 | id __objc_object_alloc(Class*); |